본문으로 건너뛰기

Plan Analysis

Plan Analysis 화면에서는 하나의 SQL이 기간 중 서로 다른 실행 계획(Plan Hash)으로 여러 번 실행된 이력을 찾아, 계획별 성능 차이와 실제 실행 계획을 확인할 수 있습니다.

좌측 메뉴에서 데이터베이스 > SQL Server > SQL Analysis > Plan Analysis를 선택하세요.

Plan Analysis 전체 화면

화면은 조회 조건, Plan Analysis List, Trend 차트, 하단 SQL List와 Plan 패널로 구성됩니다.

조회 조건 설정하기​

Period, Group, Instance로 조회 대상 기간과 인스턴스를 설정합니다. 조건을 변경한 뒤 [Search] 버튼을 클릭해야 새 조건으로 다시 조회됩니다.

Plan Count에는 조회 기간 중 실행 계획이 바뀐 횟수(이상)를 지정합니다. 값을 높일수록 계획이 더 자주 바뀐 SQL만 좁혀서 확인할 수 있습니다.

실행 계획 변경은 드물게 발생하므로, Period를 7일 등 넉넉하게 설정해야 변경 이력을 놓치지 않고 확인할 수 있습니다.

Plan Analysis List에서 계획이 바뀐 SQL 확인하기​

Plan Analysis List에서는 조건에 해당하는, 즉 지정한 횟수 이상 실행 계획이 바뀐 SQL을 목록으로 확인할 수 있습니다.

목록에서 행을 클릭하면 아래 Trend 차트와 SQL List, Plan 패널이 모두 선택한 SQL 기준으로 갱신됩니다.

목록 상단의 필터 입력란에 텍스트를 입력하면 컬럼 값 기준으로 목록을 빠르게 필터링할 수 있습니다.

목록 우측 상단의 [⋮] 버튼을 클릭하면 Reset user data, Export to Excel, Column List 메뉴가 열립니다. 이 메뉴는 SQL List 목록에도 동일하게 제공됩니다.

그리드 ⋮ 메뉴

SQL ID 클릭으로 SQL 상세 정보 확인하기​

목록에서 SQL ID 값을 클릭하면 화면 우측에 해당 SQL의 상세 패널이 열립니다. 패널 상단에서 조회할 Plan Hash를 드롭다운으로 바꿀 수 있고, 패널은 Full Text/Trend/History/Plan 네 개 탭으로 구성됩니다. 이 구성은 Single View의 SQL 상세 패널과 동일합니다.

  • Full Text: 선택한 Plan Hash 기준의 원문 SQL 텍스트를 보여줍니다.

    SQL Detail 패널 - Full Text 탭

  • Trend: Time(Elapsed/Worker Time), I/O(Logical/Physical Reads), Executions 세 개 차트로 시간대별 추이를 보여줍니다.

    SQL Detail 패널 - Trend 탭

  • History: 시간대별 Elapsed Time·Worker Time·Logical Reads·Physical Reads 값을 표로 보여줍니다.

    SQL Detail 패널 - History 탭

  • Plan: 선택한 Plan Hash의 실행 계획을 트리 구조의 표로 보여줍니다. 구성은 아래 SQL List와 Plan에서 계획 상세 확인하기 섹션의 Plan 패널과 동일합니다.

    SQL Detail 패널 - Plan 탭

우측 상단 [Search SQL >] 버튼을 클릭하면 이 SQL이 선택된 상태로 Search SQL 화면으로 이동합니다.

Trend 차트에서 계획별 성능 추이 비교하기​

Trend 차트에서는 선택한 SQL의 Plan Hash(실행 계획)별로 색상을 구분해 성능 지표 추이를 라인으로 보여줍니다.

좌측 상단 드롭다운에서 Elapsed Time (AVG), Worker Time (AVG), Logical Reads (AVG), Physical Reads (AVG) 중 표시할 지표를 변경할 수 있습니다.

차트 하단의 미니맵을 대각선 방향으로 드래그하면 원하는 구간만 확대해서 자세히 볼 수 있습니다. 우측 상단 [Drag Zoom] 아이콘이 활성화된 상태에서 드래그하며, [Reset] 아이콘을 클릭하면 원래 범위로 되돌아갑니다.

같은 SQL인데도 값이 0에 가깝게 유지되다가 특정 시점부터 그래프가 급격히 치솟으며 끊기듯 나타나는 구간이 있다면, 그 지점에서 실행 계획이 바뀌어 성능이 급격히 저하됐다는 신호입니다. 아래 SQL List에서 해당 시점의 Plan Hash를 확인하는 것이 좋습니다.

Trend 차트의 실행 시간 급증 구간

SQL List와 Plan에서 계획 상세 확인하기​

SQL List에서는 선택한 SQL이 실행된 Plan Hash별 실행 통계를 확인할 수 있습니다.

행을 클릭하면 우측 Plan 패널이 해당 계획 기준으로 갱신됩니다.

참고

행을 선택하면 선택하지 않은 다른 행의 값 옆에 ▲(빨간색)·▼(파란색) 화살표가 표시됩니다. 선택한 행의 값보다 높으면 빨간색 ▲, 낮으면 파란색 ▼로 표시되어 계획 간 성능 차이를 한눈에 비교할 수 있습니다.

Plan에서는 실행 계획을 트리 구조의 표로 보여주며, Physical Op·Logical Op·Estimate Rows·Total SubTree Cost 등 단계별 세부 정보를 확인할 수 있습니다.

Plan 패널

우측 상단 [Plan] 버튼을 클릭하면 실행 계획을 파일로 다운로드할 수 있고, 복사 아이콘을 클릭하면 Plan Hash 값을 클립보드에 복사합니다.

참고

SQL 텍스트가 암호화되어 수집된 경우 Stmt Text에 ** Encrypted Text **로 표시됩니다.

Plan Diff로 실행 계획 두 개 비교하기​

Plan 패널 우측 상단, 다운로드·복사 아이콘 옆의 비교 아이콘을 클릭하면 Plan Diff 창이 열립니다. 창은 좌우 두 개의 Plan 패널로 구성되며, 각 패널 상단의 Plan Hash Value 드롭다운에서 비교할 계획을 각각 독립적으로 선택할 수 있습니다.

Plan Diff 창

같은 SQL이라도 인자 값에 따라 옵티마이저가 서로 다른 실행 계획을 선택하는 경우(파라미터 스니핑)가 있습니다. 예를 들어 한쪽 계획은 Clustered Index Scan으로 테이블 전체를 훑는 반면, 다른 쪽 계획은 Index Seek로 필요한 행만 찾아가는 식으로 트리 구조 자체가 달라질 수 있습니다. Plan Diff로 두 계획을 나란히 열어두면 이런 구조 차이를 빠르게 찾아낼 수 있어, 실행 시간이 급증한 원인이 실행 계획 변경 때문인지 확인할 때 유용합니다.