GATHER PLAN STATISTICS
EXEM Knowledge Base
목차 |
[편집] 개념
GATHER_PLAN_STATISTICS 힌트를 사용하면 SQL 실행시 Row Source Operation 정보를 수집한다. 수집된 정보는 DBMS_XPLAN.DISPLAY_CURSOR 프로시저를 이용해서 확인가능하다.
[편집] 사용법
GATHER_PLAN_STATISTICS 힌트의 사용법은 다음과 같다.
SQL> select /*+ gather_plan_statistics */ * from delete_test where id < 1000;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
-- 10gR1에서는
-- SQL> select * from table(dbms_xplan.display_cursor(null,null,'RUNSTATS_LAST'));
-- null, null 값은 가장 최근에 실행된 쿼리를 의미한다. 만일 특정 쿼리를 지정하고 싶다면 SQL ID와 Child Number를 주면 된다.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 04zt89r2fw2uw, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from delete_test where id < 1000
Plan hash value: 1827500787
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------
| 1 | TABLE ACCESS BY INDEX ROWID| DELETE_TEST | 1 | 1 | 1000 |00:00:00.01 | 140 |
|* 2 | INDEX RANGE SCAN | DELETE_TEST_IDX | 1 | 1 | 1000 |00:00:00.01 | 70 |
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"<1000)
위의 정보에서 다음과 같은 용어를 이해해야 한다.
- E-Rows: Estimated Row 수를 의미한다.
- A-Rows: Actual Row 수를 의미한다. E-Rows와 A-Rows가 큰 차이가 나면 통계 정보 및 Cost 계산에 문제가 있다는 것을 암시한다.
- A-Time: Actual Elapsed Time을 의미한다. 이 시간은 정보 수집에 의한 Overhead를 포함한다.
- Buffers: 읽은 Buffer 수를 의미한다.
- Starts: Row Source Operation을 수행한 회수를 의미한다. 즉, E-Rows * Starts의 값을 A-Rows와 비교해야 한다.
[편집] 지원
GATHER_PLAN_STATISTICS 힌트는 오라클 10g부터 지원된다.
[편집] 참조 사항
GATHER_PLAN_STATISTICS 힌트를 사용하면 SQL 실행시 예측 계획(Explain Plan)에 의한 Row 수와 실제 실행(Row Source Operation)에 의한 Row 수를 비교할 수 있기 때문에 튜닝할 때 도움이 된다. 단, 특정 버전이나 OS에서는 STATISTICS_LEVEL 파라미터 값을 ALL로 해야만 정확한 정보가 나오는 경우가 있으므로 주의한다.