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

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

성능분석 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 사용 : 프로파일러 Event를 사용하여 실행 계획을 캡처 할 수 있다. [Perfornamce] – [Showplan XML]을 선택 한다.

 

 

 

  • SSMS : SSMS에서 [실제 실행 계획 포함]을 클릭하여 쿼리를 실행하면 실제 실행 계획을 확인 할 수 있다.

 

  • DMV : sys.dm_exec_qeury_plan(plan_handle)을 사용하여 실행 계획을 확인 할 수 있다.

USE master;

GO

SELECT * FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);

GO

 

 

 

실행 계획에서는 대기 시간 분석과 달리 실제 실행한 시간인 CPU 런타임에 초점을 맞추어야 한다. SSMS에서 그래픽화 된 실행계획은 쉽게 병목현상을 확인 할 수 있다. 화살표가 두꺼운 것은 전송되는 데이터의 양이 많다는 것을 의미한다. 이는 시간이 더 많이 걸린다는 것을 의미하기도 한다.

 

그래픽 실행계획에서 마우스를 위치하면 팝업이 나타난다. 팝업창은 많은 정보를 표시하는데 SQL Server의 통계기반으로 예상 비용과 실제 처리되고 난 후 실제 비용을 확인 할 수 있다.

 

예상 행 수와 실제 행수의 차이가 큰 경우에는 통계가 오래되었을 가능성이 크다. 또한 정렬과 같은 오퍼레이터 부분이 많은 비용을 소모 하므로 실행 계획을 통하여 확인 할 수 있다.

 

 

[참고자료]

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 4967
1949 성능분석 15탄 – I/O 관련 성능 카운터 jevida(강성욱) 2016.10.15 3993
1948 성능분석 14탄 – SQL Server 사용 성능 카운터 jevida(강성욱) 2016.10.15 3939
1947 성능분석 13탄 – 누락된 인덱스(missing index) jevida(강성욱) 2016.10.15 2326
1946 성능분석 12탄 – 문제 쿼리 식별 jevida(강성욱) 2016.10.15 2113
» 성능분석 11탄 – 실행 계획 분석 jevida(강성욱) 2016.10.15 4084
1944 성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent) jevida(강성욱) 2016.10.15 1893
1943 성능분석 9탄 – 쿼리 실행 분석 jevida(강성욱) 2016.10.15 3749
1942 성능분석 8탄 – IO 통계 (DISK 활동 분석) jevida(강성욱) 2016.10.15 1454
1941 성능분석 7탄 – 프로파일러 대기 유형 및 PREEMPTIVE_OS_WRITEFILEGATHER jevida(강성욱) 2016.10.15 1563
1940 성능분석 6탄 – CPU 경합 및 동시성 관련 대기 유형 jevida(강성욱) 2016.10.15 1872
1939 성능분석 5탄 – 메모리 및 네트워크 관련 대기 유형 jevida(강성욱) 2016.10.15 1894
1938 성능분석 4탄 – 디스크 및 IO 관련 대기 유형 jevida(강성욱) 2016.10.15 2043
1937 성능분석 3탄 – 집계 대기 통계 jevida(강성욱) 2016.10.15 1907
1936 성능분석 2탄 – 실행 요청을 기다리는 작업 확인 및 분석 (병렬 처리 대기 확인) jevida(강성욱) 2016.10.15 1339
1935 성능분석 1탄 – 실행 요청을 기다리는 작업 확인 및 분석 jevida(강성욱) 2016.10.15 1959
1934 확장이벤트를 사용하여 데드락 정보 확인 jevida(강성욱) 2016.10.15 1546
1933 확장 이벤트를 사용한 CPU 고부하 쿼리 추적 [1] jevida(강성욱) 2016.10.15 2103
1932 데이터에 대한 이해와 spill in tempdb jevida(강성욱) 2016.10.13 1756
1931 로그 파일이 많으면 왜 안 좋은가 jevida(강성욱) 2016.10.13 2044





XE Login