본문으로 건너뛰기

SQL Plan 분석

홈 화면 > 프로젝트 선택 > 분석 > SQL Plan 분석

데이터베이스에서 실행되는 SQL을 분석해 성능 문제를 진단할 수 있습니다.\

SQL Plan 분석는 Access Statistics 탭, Plan Change Summary 탭, Plan Change History 탭으로 구성되어 있습니다.

위 도입 문장의 탭 구성을 정정했습니다. 기존 문서는 Access Statistics와 Plan Change History 두 탭으로 안내하고 있었으나, 화면은 Access Statistics, Plan Change Summary, Plan Change History 세 탭입니다.

Access Statistics​

Access Statistics 탭은 실행계획 저장 이력과 SQL 통계를 통합해 SQL의 테이블 접근 방식과 튜닝 우선순위를 분석하는 화면입니다. 전체 추이에서 이상 구간을 선택한 뒤 해당 구간의 SQL 목록, 실행계획, 객체별 기여도를 한 화면에서 확인할 수 있습니다. Oracle, Oracle Pro 인스턴스의 SQL 튜닝 대상을 선정할 때 활용하세요.

Full Scan 발생 횟수를 조회하던 기존 화면을 개편해 부하가 큰 SQL의 접근 대상과 방식을 분석할 수 있습니다.

주의

화면이 전면 재구성되었습니다

기존의 Access Count, Operation Count 두 차트 구성은 더 이상 제공하지 않습니다. 추이 차트는 지표를 전환할 수 있는 단일 차트로 통합되었습니다. 아래에는 Access Type 집계, SQL 목록, 실행계획, 객체 요약 패널을 제공합니다.

패널 제목, 표의 컬럼 헤더, 옵션 버튼 라벨은 화면 언어 설정과 관계없이 영문으로 표시합니다. 일부 안내 문구와 깔때기 라벨만 화면 언어를 따릅니다.

화면 구성​

BlockDescription
조회 조건기간, 인스턴스, 필터, 집계 옵션을 함께 설정한 뒤 검색
SQL Count 추이기간 전체를 시간 버킷 막대로 표시. 막대를 끌어 분석 구간 지정
Access Type Summary분석 구간의 Access Type별 SQL 수, 실행 횟수, 비중
Access Type by SQLSQL별 Access Type 구성과 성능 지표 목록
Execution Plan목록에서 선택한 SQL의 실행계획 트리
Object Summary선택한 SQL이 읽는 객체별 요약
노트

조회 기간과 분석 구간은 다릅니다

추이 차트는 조회 기간 전체의 집계 데이터를 표시합니다. 아래의 목록, 실행계획, 객체 요약은 차트에서 지정한 분석 구간의 원본 행만 조회합니다. 최대 3개월치 실행계획 단계를 한 번에 조회할 때 발생하는 응답 지연을 줄이기 위한 구성입니다.

화면에 처음 접근하면 가장 최근 버킷 하나가 분석 구간으로 설정됩니다. 구간을 넓히려면 차트에서 원하는 범위를 드래그하거나 Access Type by SQL 패널 상단의 기간 전체 버튼을 클릭하세요.

조회 조건 설정하기​

  1. 분석 > SQL Plan 분석의 Access Statistics 탭으로 이동하세요.

  2. 시간 옵션에서 조회 기간을 선택하세요. 기본값은 1일이고 최대 3개월(91일)까지 지정할 수 있습니다.

  3. 인스턴스 옵션에서 조회할 인스턴스를 선택하세요.

  4. 필요하면 필터 옵션에서 조건을 추가하세요. 초기 조회에는 Access Type = TABLE ACCESS FULL 조건이 적용됩니다.

  5. Exclude system objects 스위치로 시스템 오브젝트 조회를 목록에서 제외할지 설정하세요. 기본값은 켜짐입니다.

  6. 검색 아이콘 버튼을 클릭하세요.

노트

기간, 인스턴스, 필터, 집계 옵션은 검색 버튼을 클릭해야 한 번에 반영됩니다. Access Type by SQL 패널의 표시 제어(정렬 기준, 표시 건수, 하한, 집계 기준, 컬럼 설정)는 이미 조회한 데이터를 다시 계산하므로 선택 즉시 반영됩니다.

필터 조건​

KeyDescription
Access Type실행계획의 접근 방식. 예: TABLE ACCESS FULL
Owner오브젝트 소유자 스키마
Object Name오브젝트 이름

조건은 같음(=)과 같지 않음(!=) 두 연산자를 지원합니다. 같지 않음 조건으로 특정 스키마나 오브젝트를 목록에서 제외할 수 있습니다.

필터는 SQL 단위로 적용됩니다. 조건에 맞는 실행계획 단계가 하나라도 있으면 해당 SQL의 모든 단계를 목록에 표시합니다. 단계별 필터링으로 일부 단계가 제외되어 구성 비율이 달라지는 것을 방지합니다.

시스템 오브젝트 제외​

SYS, SYSTEM, XDB 같은 딕셔너리 스키마와 X$, V$, DBA_ 접두 오브젝트만 읽는 조회를 목록에서 제외합니다. 사용자 오브젝트에 접근하지 않는 조회를 재귀 SQL로 분류하므로 모든 재귀 SQL을 정확하게 판정하는 방식은 아닙니다. FIXED TABLE FULL 같은 딕셔너리 조회가 사용자 SQL을 가리지 않도록 기본값을 켜짐으로 설정합니다.

SQL Count 추이 보기​

차트 상단의 두 옵션으로 조회 지표와 집계 단위를 선택하세요.

OptionValueDescription
MetricSQL Count, Executions, Elapsed막대가 나타내는 지표. 기본값은 SQL Count
IntervalHour, Day, Week막대 하나가 담는 시간 폭

Metric을 선택하면 패널 제목도 함께 변경됩니다. 선택한 Access Type은 모집단을 줄이지 않고 전체 막대에 겹쳐 표시하므로 전체에서 해당 유형이 차지하는 비중을 확인할 수 있습니다.

노트

Interval Hour는 7일까지만 선택할 수 있습니다

조회 기간이 7일을 넘으면 Hour 버튼이 비활성화되고 「7일을 넘는 조회에서는 시간 단위로 볼 수 없습니다」 안내를 표시합니다. 7일이면 시간 버킷이 168개 생성되며, 그 이상에서는 구간을 선택하기 어려워지기 때문입니다.

Interval을 선택하지 않았거나 조회 기간에 사용할 수 없는 값이면 기간에 따라 집계 단위를 자동으로 설정합니다. 이틀 이하는 Hour, 그보다 길면 Day입니다.

분석 구간은 막대를 클릭하거나 여러 막대를 끌어서 지정합니다. 지정한 구간이 아래 패널 세 개의 조회 범위가 됩니다.

Access Type Summary 읽기​

분석 구간에서 Access Type별로 얼마나 쓰였는지 집계합니다.

ColumnDescription
Access Type실행계획 접근 방식
SQL Count그 접근 방식을 쓴 SQL 수
Executions실행 횟수 합계
Share실행 횟수 기준 비중

한 SQL이 Full Scan과 Range Scan을 함께 쓰면 양쪽에 모두 더해집니다. 즉, Share는 「이 접근 방식을 쓰는 SQL이 차지하는 몫」으로 읽는 값이고 합계가 100%를 넘을 수 있습니다.

Access Type by SQL 목록 다루기​

목록은 SQL과 실행계획(sql_id + plan_hash_value) 조합 한 줄씩으로 구성됩니다.

표시 제어​

OptionDefaultDescription
정렬 기준Logical IOLogical IO, Elapsed, Executions, LIO / exec, Full Steps 중 선택
표시 건수Top 50Top 20부터 Top 1,000까지, No limit 선택 가능
Minimum executions0실행 횟수 하한
Minimum LIO per execution0실행당 논리 읽기 하한
BasisRange Total지표 집계 기준. Range Total은 구간 합산, Latest Plan은 최신 실행계획 기준

초기 조회에서 일부 SQL이 제외되지 않도록 두 하한값의 기본값을 0으로 설정합니다. 목록 길이는 표시 건수로 제한됩니다. 필요할 때 하한값을 높여 조회 대상을 좁히세요.

깔때기 표시​

패널 상단에서 목록이 축소되는 과정을 세 단계로 표시합니다.

StepDescription
구간 내분석 구간에 들어온 SQL 수
조건 통과필터와 하한 조건을 통과한 SQL 수
표시됨표에 실제로 그려진 행 수

앞의 두 값은 SQL 수, 마지막 값은 행 수입니다. 행이 SQL과 실행계획 조합 단위라 단위가 다릅니다.

컬럼 구성​

GroupColumnDescription
SQLsql_id, plan_hash_value, query_textSQL 식별자와 원문
CompositionSteps, Breakdown실행계획 단계 수와 Access Type 구성 막대
PerformanceExecutions, LIO/exec, Elapsed/exec(s)실행 횟수와 실행당 부하

Access Type 컬럼은 위험도에 따라 High Risk, Caution, Normal, Hidden 네 묶음으로 나뉩니다. 표시할 유형은 컬럼 설정에서 고를 수 있고, 정의표에 걸리지 않은 나머지 단계는 Others 컬럼에 모입니다.

기본으로 켜지는 Access Type은 다음과 같습니다.

Access TypeTier
TABLE ACCESS FULLHigh Risk
PARTITION RANGE ALLHigh Risk
INDEX SKIP SCANCaution
INDEX FAST FULL SCANCaution
INDEX FULL SCANCaution
INDEX RANGE SCANNormal
INDEX UNIQUE SCANNormal
TABLE ACCESS BY INDEX ROWIDNormal

TABLE ACCESS STORAGE FULL, BITMAP INDEX, MAT_VIEW ACCESS, HASH JOIN, NESTED LOOPS, MERGE JOIN, FIXED TABLE FULL은 기본으로 숨겨져 있으며 컬럼 설정에서 켤 수 있습니다.

선택한 SQL 자세히 보기​

목록에서 행을 선택하면 아래 두 패널에 해당 SQL의 상세 정보를 표시합니다.

Execution Plan​

ColumnDescription
Operation실행계획 단계
Object접근 대상 객체
Cost옵티마이저가 산정한 비용

Object Summary​

ColumnDescription
Object객체 이름
Access Type그 객체를 읽는 방식
Index사용한 인덱스
Cost Share전체 비용에서 차지하는 비중

표의 기본 정렬 기준은 Cost Share 내림차순입니다. 부하 기여도가 가장 높은 객체를 맨 위에 표시하며, 컬럼 헤더를 클릭해 정렬을 변경할 수 있습니다.

알아 두면 좋은 점​

  • LIO(Logical IO, 논리 읽기)는 SQL 단위로만 실측할 수 있습니다. 단계별로 나눈 값은 제공하지 않으므로 Access Type Summary에는 LIO 기여도 컬럼이 없습니다.

  • 추이 차트에서 Access Type을 여러 개 고르면 겹쳐 그린 값의 합이 전체 막대를 넘을 수 있습니다. 한 SQL이 여러 유형을 함께 쓰기 때문이며, 화면은 막대 밖으로 나가지 않도록 잘라서 표시합니다.

  • 추이 차트의 구간 건수와 목록의 행 수는 몇 건 차이가 날 수 있습니다. 차트는 집계 조회에서 오고 목록은 같은 자료에 시스템, 재귀 제외 조건을 더 걸러 낸 결과라, 화면은 사용자가 실제로 대조하는 목록 기준으로 숫자를 맞춥니다.

SQL 상세 정보 확인하기​

SQL 목록에서 query 컬럼 항목을 선택하면 SQL 상세 창이 나타납니다. SQL 쿼리문과 Plan 정보를 확인할 수 있습니다.

SQL 통계 보기→ 버튼을 클릭하면 해당 SQL 쿼리문과 관련한 통계 정보를 확인할 수 있는 SQL 통계로 이동할 수 있습니다.

SQL 상세

  • Runtime Plan: 선택된 SQL 쿼리의 실행 계획과 런타임 정보를 제공합니다. 실행 횟수, 평균 실행 시간, 평균 물리적 읽기 등 세부 정보를 제공합니다.

  • Explain Plan: 옵티마이저가 예측한 실행 계획을 보여 줍니다. 비용, 작업, 객체 이름, 카디널리티 등의 정보를 제공합니다.

  • Plan History: 데이터베이스에서 실행된 SQL 쿼리의 실행 계획에 대한 이력을 확인할 수 있습니다.

  • Bind Capture: 데이터베이스에서 실행된 SQL 쿼리에 사용된 바인드 변수의 값을 확인할 수 있습니다. 이를 통해 쿼리 실행의 실제 내용을 확인할 수 있습니다.

    노트

    실시간 실행된 bind 값이 아닌 데이터베이스에 캡처된 값(v$sql_bind_capture)입니다. 건수가 많으면 100개까지 표시합니다.

  • Trend: 선택한 SQL의 실행 지표 추이를 시계열 차트와 표로 확인할 수 있습니다. 실행 시간, 실행당 평균 지표, 파싱 횟수(total, hard) 등의 변화를 시간 순으로 보여 줍니다.

    노트

    Trend 탭에 표시되는 지표 구성은 Oracle과 Oracle Pro에서 다릅니다.

AI 튜닝 가이드​

AI 튜닝 가이드는 SQL 쿼리, Plan, 통계 정보를 분석하여 성능 문제를 진단하고, 최적화 방안을 제시하는 기능입니다. 개발자와 DBA가 병목 원인을 빠르게 파악하고, 효율적인 SQL로 성능을 개선할 수 있도록 지원합니다.

주의

사용 조건 및 유의 사항

PostgreSQL, MySQL, SQL Server는 Plan 조회가 필수입니다.
Plan을 조회하지 않으면 AI 튜닝 가이드 아이콘이 비활성 AI 튜닝 가이드 아이콘(비활성화) 상태로 표시되며, 기능을 사용할 수 없습니다.

  • AI가 생성하는 결과는 자동 분석에 기반하며, 정확도가 100%는 아님을 유의하시기 바랍니다.
  1. 분석 및 진단할 SQL을 클릭해 SQL 상세 화면으로 이동합니다.

  2. SQL 상세 화면의 오른쪽 아래 AI 튜닝 가이드 아이콘 AI 튜닝 가이드 아이콘을 클릭해 AI 분석을 시작합니다.

  3. AI 분석 결과를 확인합니다.

    결과 항목설명
    쿼리 플랜 및 요약쿼리의 목적과 실행 요약
    - 실행 횟수, 누적 실행 시간, 데이터베이스 전체 부하 비중을 분석해 해당 SQL이 시스템 성능에 미치는 영향 평가
    성능 분석분석 결과를 종합해 성능 점수와 진단 결과 제공
    - CPU 사용률, 디스크 사용률, 캐시 적중률, 대기 시간 등 쿼리 수행 과정의 세부 리소스 사용량을 분석해 병목이 발생한 구간을 시각적으로 보여 줌
    발견된 주요 이슈주요 이슈 요약 제공
    최적화 권장 사항이슈에 따른 최적화된 쿼리 제안

Plan Change History​

Plan Change History 탭에서 동일한 SQL ID라도 실행 계획이 변경되면 성능에 영향을 줄 수 있습니다. 옵티마이저에 의해 플랜이 바뀐 경우를 감지하고 모니터링하여, 불필요한 변경을 막고 SQL 성능의 일관성을 유지할 수 있습니다.

  1. 분석 > SQL Plan 분석의 Plan Change Historys 탭으로 이동합니다.

  2. 조회 시간 및 인스턴스를 선택하세요.

  3. 시간과 인스턴스 옵션을 설정하고 검색 아이콘 버튼을 클릭하세요.

  4. Plan Change Count 섹션에서 특정 시간대를 선택하면, 선택한 시간의 플랜 변경 목록을 표시합니다.

    • Plan Change Count 섹션: 시간대별 플랜 변경이 일어난 횟수를 확인할 수 있는 막대 그래프 차트

Plan 변경 사항 확인하기​

  1. SQL Plan 분석의 Plan Change Historys 탭의 목록에서 특정 변경 항목을 클릭하세요.

  2. Query 섹션에서 플랜 변경 전과 후의 세부 내용이 표시됩니다. 플랜 차이를 비교해 성능 변화의 원인을 파악할 수 있습니다.

    • Query 섹션에서 오른쪽 상단의 새창보기 아이콘 버튼을 클릭하면 해당 섹션을 새창에서 확인할 수 있습니다.
  3. Query 섹션을 닫으려면 오른쪽 상단의 닫기 아이콘 버튼을 클릭하세요.

조회 결과 필터링하기​

조회 결과를 다음 기준으로 필터링할 수 있습니다.

  • sql_id

  • sql_hash_value

  • after_plan_hash_value

  • before_plan_hash_value

필터 조건 추가하기​

  1. 필터 옵션에서 버튼을 클릭하세요.

  2. 필터 키 항목에서 원하는 필터링 기준을 선택하세요.

    • 선택한 항목의 값이 문자에 해당한다면 포함(파란색), 미포함(빨간색) 조건을 선택할 수 있습니다.

      example

    • 선택한 항목의 값이 숫자에 해당한다면 ==(같음), >=(보다 크거나 같음), <=(보다 작거나 같음) 조건을 선택할 수 있습니다.

  3. 조건 항목에서 조건을 선택하세요.

  4. 조건과 일치시킬 문자열 또는 숫자를 입력하세요.

  5. 적용 버튼을 선택하세요.

노트

필터 조건 추가 및 삭제

  • 필터링 조건을 추가하려면 추가 버튼을 클릭하고, 1 ~ 5의 과정을 반복하세요. 추가한 조건은 AND(&&) 조건으로 적용됩니다.

  • 조건 추가 중 일부 항목을 삭제하려면 필터 조건 오른쪽에 삭제 아이콘 버튼을 클릭하세요. 전체 조건을 삭제하려면 삭제 아이콘 전체 삭제 버튼을 클릭하세요.

  • 필터 옵션에 적용된 조건을 빠르게 삭제하려면 버튼을 클릭하세요.

필터 조건 수정하기​

  1. 화면 상단 필터 옵션에 적용된 항목을 클릭하세요.

  2. 필터 수정하기 창에서 원하는 항목을 수정한 후, 적용 버튼을 클릭하세요.