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

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

SQL Server 그래픽 실행 계획 및 텍스트 실행 계획

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

쿼리 실행계획에는 예상 실행계획과 실제 실행계획이 있다. 예상 실행계획은 통계를 기반으로 예상되는 실행 계획을 나타내며 실제 실행 계획은 쿼리가 수행 되면서 사용된 계획을 반환 한다. 따라서 예상 실행계획과 실제 실행계획의 비용이 차이가 날 수도 있다.

 

실행계획을 보는 방법에는 그래픽 방법과 텍스트, 기타 XML 등의 방법이 있다. 실행계획 정보에 대한 자세한 내용은 다음 MSDN을 참고 한다.

http://msdn.microsoft.com/ko-kr/library/ms189602.aspx

 

[그래픽 실행 계획]

그래픽 실행계획은 SSMS에서 [쿼리] – [예상 실행계획 표시] 또는 [쿼리] – [실제 실행 계획 포함]을 선택하여 확인 할 수 있다.

단축키는 예상 실행 계획 Ctrl+L, 실제 실행 계획 Ctrl+M 을 사용한다.

 

 

빠른 실행 아이콘을 사용 할 수도 있다. 해당 아이콘에 마우스 커서를 올려 놓으면 툴 팁으로 해당 메뉴의 설명이 나타난다.

 

 

다음은 실제 실행 계획을 포함한 결과 화면이다. 그래픽 실행 계획에서는 화살표를 따라 오른쪽에서 왼쪽 하단으로 가면서 읽으면 된다. (빨간색으로 숫자를 표시한 순서대로 읽으면 된다.)

SELECT *

FROM DBO.DIMORGANIZATION

LEFT JOIN DBO.DIMCURRENCY ON DIMORGANIZATION.CURRENCYKEY=DIMCURRENCY.CURRENCYKEY

WHERE DIMORGANIZATION.PARENTORGANIZATIONKEY IS NOT NULL

ORDER BY DIMORGANIZATION.PARENTORGANIZATIONKEY,DIMORGANIZATION.CURRENCYKEY

GO

 

 

  1. 클러스터된 인덱스 스캔
  2. 소트 및 병렬로 클러스터 인덱스 탐색
  3. NL조인 실행
  4. 결과 반환

 

 

작업 사이에서 전달되는 데이터의 양은 화살표의 두께에 의해 표시 된다. 화살표 위로 마우스 커서를 올려 놓으면 전달되는 행을 확인 할 수 있다.

 

 

[텍스트 계획]

  • 텍스트 실행 계획에는 몇 가지 방법이 있다.
  • SET SHOWPLAN_TEXT : T-SQL문을 실행 하지 않고 실행 정보만 반환. ON으로 설정할 경우 다시 OFF 할때 까지 이후 모든 SQL Server문에 대한 실행 계획정보가 반환.
  • SET SHOWPLAN_ALL : T-SQL문은 실행 하지 않고 실행 정보만 반환. ALL 옵션은 쿼리 프로세서가 각 문을 실행 할 때 취한 단계를 나타내는 계층적 트리를 이루는 행 집합으로 정보를 반환. 출력에 반영된 각 문에는 문의 텍스트가 있는 단일 행이 포함되고 이 단일 행 뒤에는 실행 단계에 대한 자세한 정보가 있는 몇 개의 행이 있다.
  • SET SHOWPLAN_XML : XML 문서 집합으로 정보를 반환. 각 문서에는 일괄 처리에 있는 문의 텍스트가 먼저 오고 그 뒤에 실행 단계에 대한 세부정보가 나타난다. 예상 비용, 행수, 액세스한 인덱스, 수행 연산자 유형, 조인 순서 및 실행 계획에 대한 자세한 정보를 보여 준다.
  • SET STATISTICS PROFILE : 실행된 각 쿼리가 일반 결과 집합을 반환하고 그 뒤에 쿼리 실행 정보의 집합을 반환한다.

 

 

그래픽에서 사용한 쿼리와 동일한 쿼리를 텍스트 실행 계획으로 나타내었다.

SET SHOWPLAN_ALL ON

GO

 

SELECT *

FROM DBO.DIMORGANIZATION

LEFT JOIN DBO.DIMCURRENCY ON DIMORGANIZATION.CURRENCYKEY=DIMCURRENCY.CURRENCYKEY

WHERE DIMORGANIZATION.PARENTORGANIZATIONKEY IS NOT NULL

ORDER BY DIMORGANIZATION.PARENTORGANIZATIONKEY,DIMORGANIZATION.CURRENCYKEY

GO

 

SET SHOWPLAN_ALL OFF

GO

 

자식과 부모 노드는 ( | ) 기로호 연결되어 있다. 들여쓰기는 노드의 깊이 이다. 실행 계획을 읽는 순서는 빨간색으로 별도 표시 하였다. 파이프 문자에서 가장 오른쪽에 위치에서 시작하는 문장부터 시작해야 한다.

 

 

지금은 쿼리가 간단하여 한눈에 실행계획이 보이지만 쿼리가 복잡해지면 실행계획 또한 매우 복잡해 진다. 꾸준히 실행계획을 볼 수 있도록 연습 하도록 하자.

 

[참고 자료]

http://www.mssqltips.com/sqlservertip/2585/comparison-between-a-sql-server-graphical-plan-and-text-plan/

 


강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 3621
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1582
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1693
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1432
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1308
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1559
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1237
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 3588
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1238
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1063
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1179
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1064
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1128
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1300
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1652
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1228
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1418
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1065
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 958
» SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3099





XE Login