본문으로 건너뛰기

Plan Analysis

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

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

Plan Analysis 전체 화면

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

조회 조건 설정하기

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 ListPlan에서 계획 상세 확인하기 섹션의 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로 두 계획을 나란히 열어두면 이런 구조 차이를 빠르게 찾아낼 수 있어, 실행 시간이 급증한 원인이 실행 계획 변경 때문인지 확인할 때 유용합니다.