GATHER PLAN STATISTICS

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 개념

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로 해야만 정확한 정보가 나오는 경우가 있으므로 주의한다.

[편집] 예제

[편집] 관련 정보

  1. DBMS_STAS 패키지
  2. Explain Plan
  3. 10046 Event

[편집] 외부 참조

  1. http://jonathanlewis.wordpress.com/2006/11/09/dbms_xplan-in-10g
  2. http://jonathanlewis.wordpress.com/2007/04/26/heisenberg/