강성욱 10

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스에서 발생하는 행위는 모두 트랜잭션 로그에 기록된다. 트랜잭션 로그를 읽는 방법과 트랜잭션 로그에서 삭제된 데이터 복구, 삭제한 사용자 찾기에 대한 내용은 이전 아티클을 참고 한다. SQL Server 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 : http://sqlmvp.kr/140206499367 SQL Server에서 Drop 및 Delete 사용자 찾기 : http://sqlmvp.kr/140202164558 변경된 테이블 이름 복구하기 : htt..

Collation 변경

Collation 변경 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server를 설치할 기본 데이터 정렬 구성은 Windows Server의 데이터 정렬을 참고 한다. 사용자 설정에 따라 기본 데이터 정렬을 변경 할 수도 있다. SQL Server 2014 설치 : http://sqlmvp.kr/140211418959 데이터베이스의 기본 데이터 정렬 설정에 따라 테이블을 생성할 때 문자열 타입의 경우 기본적으로 데이터베이스의 기본 데이터 정렬을 참고하여 생성된다. 이번 포스트는 테이블 컬럼에 Korean_Wansung_CI_AS 정렬에서 SQL_Latin1_General_CP1_CI_AS 정렬로 변경하는 방법에 대해서 알아 본다. 실습을 위해 문자..

성능분석 17탄 – SQLServer 블록킹 / 네트워크 관련 성능 카운터

성능분석 17탄 – SQLServer 블록킹 / 네트워크 관련 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 블록킹 및 네트워크 관련 성능 카운터에 대해서 알아 본다. [SQL Server Blocking] SQLServer:Locks [SQLServer:Locks]에 위치하며 카운터의 정보는 각 서버의 잠금 요청에 대한 통계를 반환한다. 잠금 관련 성능 문제가 발생 할 경우 카운터 정보를 모니터링 하여 분석해야 한다. 카운터 정보만으로는 블록이 발생하지만 어떤 원인에 의해서 차단되는지는 알 수가 없다. 따라서 DMV등을 활용하여 차단되는 원인을 함께 분석해야 한다. 다음 링크는 Adam Machanic 블로그의 블록 모니터링 관련 아티..

성능분석 16탄 – 메모리 / CPU 관련 성능 카운터

성능분석 16탄 – 메모리 / CPU 관련 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 메모리 및 CPU와 관련된 성능 카운터에 대해서 알아본다. [메모리] Page life expectancy [SQLServer:Buffer Manager] – [Page life expectancy]에 위치하며 페이지가 버퍼풀에 머무르는 시간을 나타낸다. 페이지가 버퍼풀에 오래 머무를수록 디스크를 액세스하는 빈도가 낮아지며 메모리에서 데이터를 읽기 때문에 성능상 이점이 있다. Page life expectancy 계속해서 낮게 나온다면 메모리를 추가할 것을 고려해야 한다. MS백서에서는 임계값을 300(5분)으로 안내하고 있지만 이는 2006년에 권장한 값으로 각자의 ..

성능분석 15탄 – I/O 관련 성능 카운터

성능분석 15탄 – I/O 관련 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 I/O와 관련된 성능 카운터에 대해서 알아본다. Page reads/sec [SQLServer:Buffer Manager] – [Page reads/sec]에 위치하며 실제 데이터베이스에서 읽은 페이지의 수를 나타낸다. 이 카운터의 성능은 디스크 IO 읽기의 중요한 지표이다. 일반적으로 데이터는 버퍼풀에 캐싱되어 있어 디스크에서는 적은 데이터만 읽어 부하를 줄인다. 이 수가 높게 나타난다면 누락된 인덱스 또는 메모리 부족일 가능성 있다. Page writes/sec [SQLServer:Buffer Manager] – [Page reads/sec]에 위치하며 실제 데이터베이스에서 ..

성능분석 14탄 – SQL Server 사용 성능 카운터

성능분석 14탄 – SQL Server 사용 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 성능카운터는 SQL 서버 성능에 대한 또 다른 관점을 제공 한다. SQL Server에서 사용하는 성능카운터에 대해서 알아본다. 아래 소개한 카운터 외에도 다양한 카운터 정보를 활용 할 수 있다. Batch Requests/sec [SQLServer:SQL Statistics] – [Batch Requests/sec]에 위치하며 서버에 수신되는 SQL 일괄 처리 요청 수 이다. Transactions 모든 활성 트랜잭션의 수를 나타낸다. 트랜잭션 카운터는 [SQLServer:General Statistics], [SQLServer:Transactions] 두 군데 위..

성능분석 13탄 – 누락된 인덱스(missing index)

성능분석 13탄 – 누락된 인덱스(missing index) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 누락된 인덱스는 성능 문제를 일으킬 수 있다. 누락된 인덱스(missing index)는 인덱스가 생성되어 있지만 사용되지 않는 인덱스이다. SQL Server 2005 부터는 누락된 인덱스를 확인하기 위한 DMV가 제공되고 있다. 다음 DMV를 활용하여 누락된 인덱스의 정보를 확인 할 수 있다. Sys.dm_db_missing_index_details : 누락된 인덱스에 대한 상세 정보 반환 Sys.dm_db_missing_index_group_stats : 누락 된 인덱스 그룹에 대한 요약 정보 반환 Sys.dm_db_missing_in..

성능분석 12탄 – 문제 쿼리 식별

성능분석 12탄 – 문제 쿼리 식별 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서는 sys.dm_exec_query_stats DMV를 사용하여 실행된 쿼리에 대한 통계를 확인 할 수 있다. DMV에서는 몇 개의 쿼리가 실행 되었는지, 전체, 최대, 최소. 마지막 활성 CPU 시간 등을 확인 할 수 있으며 전체, 최대, 최소, 마지막 읽기 쓰기에 대한 정보를 확인 할 수 있어 문제를 식별하는데 매우 좋은 정보이다. select* from sys.dm_exec_query_stats Large execute count 많은 실행 횟수는 자주 실행되는 쿼리로 성능에 가장 민감하다. 빈도가 높은 만큼 작은 개선이 전반적으로 상당한 성능에 이점을 가져올 ..

성능분석 11탄 – 실행 계획 분석

성능분석 11탄 – 실행 계획 분석 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서는 쿼리에 대한 실제 실행 계획을 확인 할 수 있다. 실제 쿼리가 실행되는 과정을 XML 트리로 확인 할 수 있는 방법이 몇 가지 있다. SET SHOWPLAN_XML_ON : 해당 세션에서 SET SHOWPLAN_XML_ON 명령을 수행하고 쿼리를 실행 한다. set showplan_xml on go select * from [HumanResources].[EmployeeDepartmentHistory] XML을 클릭하면 그래픽의 실행계획을 확인 할 수 있으며 마우스 오른쪽 클릭을 사용하여 XML 트리를 확인 할 수 있다. Profiler 사용 : 프로파일러 Eve..

성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent)

성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent) Version : SQL Server 2005, 2008, 2008R2, 2012 쿼리 또는 저장프로시저에 대한 가장 좋은 대기 유형 정보는 실행 시간과 IO 정보이다. 이 정보는 확장이벤트(XEvent)를 사용하여 모니터링을 할 수 있다. 다음 스크립트는 Sqlos.wait_info 정보를 캡처하고 특정 실행 세션(SPID)에 대한 확장 이벤트 세션을 필터링하는 확장이벤트 세션 생성 작업이다. create event session session_waits on server add event sqlos.wait_info (WHERE sqlserver.session_id= 54/*execution_spid*/ and duration>0) , ad..