SQLP

시험 직전 요약장

판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.

이론 목록

실제 실행 통계 읽기: GATHER_PLAN_STATISTICS와 E-Rows·A-Rows

원래 이론 →

판단 기준

혼동하기 쉬운 판단정확한 기준
ALLSTATS LAST만 쓰면 A-Rows가 생긴다실행 전에 통계 수집이 활성화되어야 한다
E-Rows와 A-Rows를 그대로 비교한다Starts가 여러 번이면 총량 또는 1회당 단위를 맞춘다
최상위 큰 오차가 원인이다Leaf부터 최초로 어긋난 Operation을 찾는다
모든 Buffers와 A-Time을 합한다상위 값이 하위 작업을 포함할 수 있어 단순 합산하지 않는다
Buffers는 고유 Block 수다Consistent·Current Mode 논리 요청 작업량이다
A-Rows 차이가 크면 통계 재수집으로 해결된다Skew·상관관계·Bind·표현식 등 원인을 확인한다
SQL을 실행했으면 전체 결과 통계다실제 Fetch 범위를 확인한다
같은 Plan이면 Reads도 같다Cache 상태에 따라 물리 I/O가 달라질 수 있다
Starts=0 Branch도 실제 수행됐다Adaptive inactive Branch일 수 있다
OMem보다 Used-Mem이 작으면 항상 문제가 없다TEMP Spill과 Last Execution Mode를 함께 확인한다

이 부분의 원문 →

헷갈리는 개념

방법적용 범위장점주의점
GATHER_PLAN_STATISTICS해당 Statement대상 SQL만 계측SQL Text와 SQL_ID가 달라질 수 있음
STATISTICS_LEVEL=ALL현재 SessionSQL Text 수정 없이 Session 단위 계측Session의 여러 SQL에 추가 계측 비용

이 부분의 원문 →

대표 계산·예제

SQL
SELECT /*+ GATHER_PLAN_STATISTICS */
       d.department_name,
       o.order_id,
       o.order_date
FROM   departments d
JOIN   orders o
  ON   o.department_id = d.department_id
WHERE  d.location_id = 1700
AND    o.order_status = 'OPEN';

가상의 실행 결과입니다.

예시·텍스트
--------------------------------------------------------------------------------------------------
| Id | Operation                     | Name        | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT              |             |      1 |        |  5,000 | 00:00.12 | 16,200 |
|  1 |  NESTED LOOPS                 |             |      1 |     50 |  5,000 | 00:00.12 | 16,200 |
|* 2 |   TABLE ACCESS FULL           | DEPARTMENTS |      1 |      5 |      5 | 00:00.01 |     20 |
|* 3 |   TABLE ACCESS BY INDEX ROWID | ORDERS      |      5 |     10 |  5,000 | 00:00.11 | 16,180 |
|* 4 |    INDEX RANGE SCAN           | ORD_DEPT_IX |      5 |     10 |  5,000 | 00:00.02 |  1,200 |
--------------------------------------------------------------------------------------------------

Predicate Information
---------------------
  2 - filter("D"."LOCATION_ID"=1700)
  3 - filter("O"."ORDER_STATUS"='OPEN')
  4 - access("O"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.