본문 바로가기
카테고리 없음

[DBeaver] MSSQL 실행 계획 보는 방법

by 성은2 2025. 4. 9.

 

  • 실행계획은 쿼리를 분석하고 인덱스 최적화할 때 꼭 필요한 도구
  • SHOWPLAN_ALL을 사용하면 GUI 실행계획 뷰가 없어도 텍스트 기반 계획을 확인할 수 있음

 

아래 SQL을 순차적으로 실행하면 실행계획을 텍스트 기반으로 볼 수 있습니다.

 

1. 실행계획 활성화 (실제 쿼리는 실행되지 않고, 실행계획만 출력됨)

SET SHOWPLAN_ALL ON;

 

 

2. 실행계획을 보고 싶은 쿼리 작성
※ 실제 데이터는 조회되지 않으며, 실행계획 정보만 결과로 반환됨

SELECT A.stamp_seq_no , A.mmbr_no , A.appr_no, a.appr_dt, a.receipt_no
FROM
....(생략)

 

3. 실행계획 종료 (이후부터는 실제 쿼리가 실행됨)

SET SHOWPLAN_ALL OFF;

 

2번까지 실행 시 이런식으로 실행계획이 텍스트 기반으로 출력됩니다.

 

 

📄 텍스트 기반 실행계획 컬럼 설명 (DBeaver, SHOWPLAN_ALL 기준)

StmtText 실행될 SQL 문 자체. 일반적으로는 쿼리문 전체 또는 일부 조각이 나옴.
StmtId 각 쿼리 문장의 고유 ID. 하나의 배치(batch) 내에 여러 쿼리가 있을 때 구분용.
NodeId 실행 순서를 파악하는 ID. 숫자가 클수록 아래 단계, 즉 먼저 실행되는 연산자임.
Parent 상위 노드 ID. Node 간 트리 구조 관계를 보여줌.
PhysicalOp 실제로 수행되는 물리 연산.
예: Table Scan, Index Seek, Nested Loops 등
LogicalOp 논리적 연산.
예: Join, Filter, Aggregate 등
Argument 연산에 사용된 조건이나 추가 정보.
예: 조인 조건, 정렬 방식 등
DefinedValues 해당 단계에서 생성되거나 반환되는 컬럼 목록
EstimateRows 해당 단계에서 예상되는 결과 행 수
EstimateIO 예상 디스크 I/O 비용
EstimateCPU 예상 CPU 연산 비용
AvgRowSize 평균 행 크기 (바이트 단위)
TotalSubtreeCost 현재 노드 + 그 아래 모든 연산자의 누적 비용
OutputList 다음 단계로 넘겨주는 컬럼 목록
Warnings 경고 메시지 (예: 인덱스 누락 등)
[Type] SELECT, INSERT 등 쿼리 유형
Parallel 병렬 실행 사용 여부 (TRUE / FALSE)
EstimateExecutions 해당 연산 단계가 실행될 것으로 예상되는 횟수

 

분석 Tip : NodeId가 큰 것부터 실행됩니다 → 트리의 말단부터 시작해서 루트로 올라가는 구조

ex) 5 -> 4-> 3-> 2-> 1

MSSQL의 실행계획은 **트리 구조(Tree Structure)**로 구성되어 있으며, **하위 노드(leaf node)**부터 실행되어 **상위 노드(root node)**로 결과가 전달되는 구조를 가지고 있습니다.

 

🌳 트리 구조 설명

  • SQL Server는 각 연산(예: Table Scan, Join, Filter 등)을 **노드(Node)**로 표현합니다.
  • 이 노드들은 **계층 구조(Tree)**로 연결되어 있으며, 하위 노드에서 상위 노드로 데이터가 흐릅니다.
  • NodeId는 실행계획에 표시된 고유 식별자로, 높은 번호일수록 더 아래(먼저 실행되는) 연산자를 의미합니다.

 

 

▶ 공식 개념 요약 (MSDN 요약)

"SQL Server executes a query plan starting at the leaf nodes (the data access operators) and works up the tree to produce the final result."
Microsoft Docs – Execution Plan Basics