본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]실행계획 보기 및 설명

by 빛과 어둠사이 2019. 7. 31.
728x90
반응형
SMALL

SQL SERVER DB를 사용하다보면

실행계획을 봐야 할 때가 많이 있습니다.

쿼리 튜닝을 하거나

맨 처음 쿼리를 작성할 때도

많이 봐야 합니다.


이 때를 대비해서

실행계획을 보는 방법 및

간단한 설명을 정리해보고자 합니다.



1. SSMS에서 실행계획 보기

저는 SQL SERVER를 사용할 때

SSMS를 제일 많이 사용합니다.

그래서 SSMS 기반으로

설명을 드리도록 하겠습니다.


1-1. 상단 메뉴





상단 메뉴에 실행계획을 보는

단축아이콘이 있습니다.

그것을 클릭하면 됩니다.




1-2. 마우스 우클릭



마우스 우클릭을 해서도

실행계획을 실행할 수 있습니다.

위처럼 마우스 우클릭하면

실행계획을 보는 메뉴가 있습니다.

이를 실행하면 됩니다.



1-3. 단축키

위 2개의 이미지를 보면

단축키가 나와있습니다.

Ctrl + L 입니다.

이렇게 누르면 실행계획이 나옵니다.



1-4. 실행계획 텍스트로 표시하기

SET절을 이용해서 실행계획을 표시할 수 있습니다.

제가 아는 것은 SET을 이용해서 실행계획을 표시하는데

TEXT 형식으로 나오게 됩니다.

위 1~3번의 경우에는

아이콘으로 나오는데

이 방법은 텍스트로 나오게 됩니다.

방법은 다음과 같습니다.


111111111111


위처럼 작성하여 돌리게 되면

아래처럼 결과가 나옵니다.



SET절로 해서 나오게 했다면

반드시 OFF를 시켜주어야 합니다.



2. 실행계획 보기

위에 여러가지 방법으로

실행계획을 보게 되면

아래처럼 나오게 됩니다.




제일 먼저 실행이 되는 것은

오른쪽 하단부터입니다.

그것부터 순차적으로 올라가면서 실행이 됩니다.


그리고 비용이라고 나오는데

이것은 해당 쿼리가 동작되는 동안

발생하는 소요비용??

그런걸 말하는 것입니다.




저기 보면 비용이 높은 것들이 있습니다.

그런 높은 것 위주로 보고

튜닝을 해주시면 되십니다.


3. 실행계획 설명

실행계획을 실행하면 여러가지 정보가 나옵니다.

그런 정보들에 대한 설명입니다.


열 이름 설명
Rows 실행된 행수
Executes Loop 일 경우 Loop가 실행 된 횟수
StmtText PLAN_ROW 유형의 행에 대해서 이 열에 작업에 대한 설명
StmtId 현재 일괄 처리에 있는 문의 수 (몇번째 쿼리에 대한 통계인지)
NodeId 현재 쿼리의 노드 ID (현재 노드의 식별값)
Parent 부모 단계의 노드 ID (이 값이 같은 것 끼리, 같은 depth라고 생각하면 된다)
PhysicalOp 노드에 대한 물리적 구현 알고리즘입니다. PLAN_ROWS 형식의 행에만 해당됩니다.
LogicalOp 이 노드가 나타내는 관계형 대수 연산자입니다. PLAN_ROWS 형식의 행에만 해당됩니다.
Argument 수행되는 작업에 대한 추가 정보를 제공합니다. 물리적 연산자에 따라 이 열의 내용이 달라집니다.
DefinedValues 이 연산자가 사용하는 값에 대한 쉼표로 구분된 목록을 포함합니다.
EstimateRows 이 연산자가 생성한 출력의 예상 행 수입니다. PLAN_ROWS 형식의 행에만 해당됩니다.
EstimateIO 작업에 대한 예상 I/O 비용입니다. PLAN_ROWS 형식의 행에만 해당됩니다.
EstimateCPU 이 연산자에 대한 예상 CPU 비용입니다. PLAN_ROWS 형식의 행에만 해당됩니다.
AvgRowSize 이 연산자를 통해 통과되는 행의 예상 평균 행 크기(바이트)입니다.
TotalSubtreeCost 이 작업 및 모든 자식 작업에 대한 예상(누적) 비용입니다.
OutputList 현재 작업에서 예상하고 있는 열에 대한 쉼표로 구분된 목록을 포함합니다.
Warnings 현재 작업과 연관된 경고 메시지에 대한 쉼표로 구분된 목록을 포함합니다.
Type 노드 유형. 각 쿼리의 부모 노드에 대해서는 노드 유형이 Transact-SQL 문 유형(예: SELECT, INSERT, EXECUTE 등)입니다. 실행 계획을 나타내는 하위 노드에 대해서는 PLAN_ROW 유형입니다.
Parallel 0 = 연산자가 병렬로 실행되지 않습니다.
1 = 연산자가 병렬로 실행됩니다.
EstimateExecutions 현재 쿼리를 실행하는 동안 이 연산자가 실행될 예상 횟수입니다.


이상으로 MS-SQL에서의 실행계획 보기 및 설명이였습니다~

728x90
반응형
LIST