서버 개발/데이터베이스 기타 & 팁

[MSSQL] 실행 계획 보는 방법

지노윈 2020. 4. 19. 17:33
반응형

SQL이 의도한 대로 동작하고 있는지 꼭 확인을 해야 겠습니다.

그러기 위해서는 실행 계획을 읽는 방법도 확실하게 알아야 겠습니다.

 

아래 아이콘을 눌러 놓고 SQL을 실행하면 실행 계획도 함께 볼 수 있습니다.

다음과 같이 볼 수 있습니다.

그래프가 아니라 텍스트 모드로도 볼 수 있습니다.

 

- 텍스트 실행 계획 보기 ON/OFF

SET SHOWPLAN_ALL ON 
GO

SET SHOWPLAN_ALL OFF
GO

 

- 텍스트 실행 계획 보기를 ON 시키면 다음과 같이 실행 계획을 텍스트로 볼 수 있습니다.

  |--Parallelism(Gather Streams)
       |--Hash Match(Right Outer Join, HASH:([B].[userno])=([A].[userno]), RESIDUAL:([jino].[dbo].[inventory].[userno] as [A].[userno]=[jino].[dbo].[user].[userno] as [B].[userno] AND [Expr1006] like '202001%'))
            |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([B].[userno]))
            |    |--Nested Loops(Inner Join, OUTER REFERENCES:([Bmk1003], [Expr1008]) WITH UNORDERED PREFETCH)
            |         |--Parallelism(Distribute Streams, RoundRobin Partitioning)
            |         |    |--Index Seek(OBJECT:([jino].[dbo].[user].[idx_guildno] AS [B]), SEEK:([B].[guildno]=(1)) ORDERED FORWARD)
            |         |--RID Lookup(OBJECT:([jino].[dbo].[user] AS [B]), SEEK:([Bmk1003]=[Bmk1003]) LOOKUP ORDERED FORWARD)
            |--Compute Scalar(DEFINE:([Expr1006]=CONVERT(varchar(8),[jino].[dbo].[inventory].[reg_date] as [A].[reg_date],112)))
                 |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([A].[userno]))
                      |--Table Scan(OBJECT:([jino].[dbo].[inventory] AS [A]))

 

이제 실행 계획을 읽는 방법을 알려 드릴게요.

그래프 실행 계획은 가장 오른쪽 부터 부모 노드로 따라 가면서 읽습니다. 

부모 노드의 형제들이 여러명이면 위쪽 부터 읽습니다. 읽는 형제의 자식이 있다면 형제의 자식을 먼저 읽고요.

즉, 오른쪽에서 왼쪽으로 위에서 아래로 읽습니다.
읽는 순서를 표기하면 다음과 같습니다.

텍스트 모드 실행 계획(SET SHOWPLAN_ALL ON)

 

 

[데이터베이스/기타 및 팁] - [MS-SQL] 실행 계획 아이콘

[데이터베이스/기타 및 팁] - [MS-SQL] 실행 계획의 subtree cost는 무엇인가?