데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

성능분석 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 * from [dbo].[DatabaseLog]

 

 

  • 검색 수(scan count) : 테이블을 scan 또는 seek 한 횟수. 최소 한번은 검사해야 한다.
  • 논리적 읽기 수(logical reads) : 데이터를 메모리 캐시(버퍼풀)에서 읽은 데이터 페이지의 수
  • 물리적 읽기 수(physical reads) : 데이터가 디스크로부터 버퍼풀에 전송된 페이지 수. 데이터 전송이 완료 될 때까지 블록 또는 대기가 발생한다.
  • 미리 읽기 수(read-ahead reads) : 비동기적으로 디스크로부터 데이터를 읽어 버퍼풀에 넣는 페이지 수.
  • LOB 논리적/물리적/미리 읽기 수 : LOB 데이터를 읽은 페이지 수

 

논리적 읽기의 수 및 물리적 읽기 수는 적을수록 좋다. 큰 논리적 읽기는 테이블의 end-to-end 스캔을 포함하며 적은 횟수의 실행에도 많은 CPU를 소비할 수 있다. 버퍼풀에 데이터가 없는 경우에는 디스크로부터 데이터를 읽어 버퍼풀에 전송하는데 이때 대기 시간이 길게 나타나며 대부분의 시간은 인덱스가 누락된 경우 나타난다.

 

쿼리 실행에 대한 통계 정보는 SQL 프로파일러를 통해서도 확인 할 수 있다. SQL:StmtComplete, SQL:BatchColplete, SP:StmtComplete 및 RPC:Complete에서 읽기, 쓰기, 저장프로시저 또는 SQL의 개별 구문에 대한 개별 처리 시간 등을 확인 할 수 있다. 읽기의 수는 논리적 읽기이다. Complete 이벤트 값이 높은 쿼리문의 경우 성능 저하를 일으킬 수 있기 때문에 개별 구문에 대해 모니터링을 해야한다.

 

sys.dm_exec_requsts DMV에서도 실행 중인 쿼리의 IO정보를 확인 할 수 있다.

select * from sys.dm_exec_requests

 

 

 

[참고자료]

http://rusanu.com/2014/02/24/how-to-analyse-sql-server-performance/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1950 성능분석 16탄 – 메모리 / CPU 관련 성능 카운터 jevida(강성욱) 2016.10.15 5068
1949 성능분석 15탄 – I/O 관련 성능 카운터 jevida(강성욱) 2016.10.15 4001
1948 성능분석 14탄 – SQL Server 사용 성능 카운터 jevida(강성욱) 2016.10.15 3953
1947 성능분석 13탄 – 누락된 인덱스(missing index) jevida(강성욱) 2016.10.15 2343
1946 성능분석 12탄 – 문제 쿼리 식별 jevida(강성욱) 2016.10.15 2122
1945 성능분석 11탄 – 실행 계획 분석 jevida(강성욱) 2016.10.15 4145
1944 성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent) jevida(강성욱) 2016.10.15 1909
» 성능분석 9탄 – 쿼리 실행 분석 jevida(강성욱) 2016.10.15 3868
1942 성능분석 8탄 – IO 통계 (DISK 활동 분석) jevida(강성욱) 2016.10.15 1460
1941 성능분석 7탄 – 프로파일러 대기 유형 및 PREEMPTIVE_OS_WRITEFILEGATHER jevida(강성욱) 2016.10.15 1590
1940 성능분석 6탄 – CPU 경합 및 동시성 관련 대기 유형 jevida(강성욱) 2016.10.15 1882
1939 성능분석 5탄 – 메모리 및 네트워크 관련 대기 유형 jevida(강성욱) 2016.10.15 1927
1938 성능분석 4탄 – 디스크 및 IO 관련 대기 유형 jevida(강성욱) 2016.10.15 2066
1937 성능분석 3탄 – 집계 대기 통계 jevida(강성욱) 2016.10.15 1916
1936 성능분석 2탄 – 실행 요청을 기다리는 작업 확인 및 분석 (병렬 처리 대기 확인) jevida(강성욱) 2016.10.15 1352
1935 성능분석 1탄 – 실행 요청을 기다리는 작업 확인 및 분석 jevida(강성욱) 2016.10.15 1980
1934 확장이벤트를 사용하여 데드락 정보 확인 jevida(강성욱) 2016.10.15 1549
1933 확장 이벤트를 사용한 CPU 고부하 쿼리 추적 [1] jevida(강성욱) 2016.10.15 2115
1932 데이터에 대한 이해와 spill in tempdb jevida(강성욱) 2016.10.13 1761
1931 로그 파일이 많으면 왜 안 좋은가 jevida(강성욱) 2016.10.13 2051





XE Login