SQL Server/SQL Server Tip 662

성능분석 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..

성능분석 9탄 – 쿼리 실행 분석

성능분석 9탄 – 쿼리 실행 분석 Version : SQL Server 2005, 2008, 2008R2, 2012 성능에 대한 쿼리를 분석할 때 참고 할 수 있는 통계를 살펴 보자. SET STATISTICS TIME ON 쿼리 분석 시간은 컴파일 시간 및 실행 시간을 포함한다. 여러 개의 문이 있는 일괄 처리 또는 저장 프로시저를 실행하는 경우 어떤 구문에서 비용이 발생하는지 확인 할 수 있다. 실행계획을 분석하면 더 많은 정보를 확인 할 수 있다. SET STATISTICS TIME ON select * from [dbo].[ErrorLog] SET STATISTICS IO ON IO 통계를 보여준다. 각 구분의 IO 실행 결과를 나타낸다. SET STATISTICS IO ON select * fr..

성능분석 8탄 – IO 통계 (DISK 활동 분석)

성능분석 8탄 – IO 통계 (DISK 활동 분석) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 디스크에서 데이터를 읽고 쓰기 작업을 한다. 모든 쓰기 작업은(insert, update, delete) 반드시 디스크에 기록되어야 한다. 쿼리는 항상 메모리 캐시(buffer pool)에서 데이터를 반환하지만 원하는 데이터가 캐시에 없는 경우 디스크로부터 데이터를 읽어 캐시에 적재 후 반환한다. 이때 IO 병목이 발생하며 성능 조사가 필요하다. SQL Serve는 데이터 및 로그 IO 요청에 대한 모든 정보를 수집하고 집계한다. 다음 DMV를 사용하여 쓰기 및 읽기의 수를 확인한다. select db_name(io.database_id) as dat..