Explain Plan, GATHER_PLAN_STATISTICS 힌트, DBMS_XPLAN 패키지를 이용해서 CBO의 SQL 실행계획을 확인할 수 있지만 10053 이벤트를 이용하면 보다 구체적으로 CBO의 쿼리변환, 최적화 과정을 시간순으로 모니터링 할 수 있다.
점점 발전하는 CBO의 쿼리실행을 위한 전과정을 확인 가능한데 Query Transformation, Query Optimization을 과정을 Trace 파일로 제공한다. Trace 파일의 위치는 show parameter user_dump_dest로 확인 가능하다.
2. Oracle Hint, Tuning_ 튜닝의 도구 : 10053 Event
1.9 튜닝의 도구 : 10053 Event
Explain Plan, GATHER_PLAN_STATISTICS 힌트, DBMS_XPLAN 패키지를 이용해서 CBO의 SQL
실행계획을 확인할 수 있지만 10053 이벤트를 이용하면 보다 구체적으로 CBO의 쿼리변환,
최적화 과정을 시간순으로 모니터링 할 수 있다.
점점 발전하는 CBO의 쿼리실행을 위한 전과정을 확인 가능한데 Query Transformation, Query
Optimization을 과정을 Trace 파일로 제공한다. Trace 파일의 위치는 show parameter
user_dump_dest로 확인 가능하다.
3. Oracle Hint, Tuning_ 튜닝의 도구 : 10053 Event
DBMS_XPLAN등에서 확인 할 수 없는 PL/SQL 함수 호출에 대해서도 확인이 가능하다.
CBO에서 쿼리 수행을 위한 전과정을 시간순으로 모니터링 할 수 있는데 아래 내용들을 확인할
수 있다.
• Optimizer가 참조하는 기본 환경설정 파라미터 값 및 Bug Fix에 대한 내용
• Query Transformation 전 과정
• Query Optimization 전 과정(시스템/테이블 통계정보등을 이용해서 Access Path, Join
Type을 결정하는 모든 과정에 대해 확인할 수 있다.)
Transformation 수행을 비용(COST)을 기반으로 하는 CBQT(Cost Based Query
Transformation)를 확인할 수 있다.
4. Oracle Hint, Tuning_ 튜닝의 도구 : 10053 Event
10053 이벤트를 발생시키는 방법
• alter session set events ‘10053 trace name context forever’;
• //level 2는 옵티마이저의 기본 파라미터 값들과 Bug Fix 내용이 생략되어 파일사이즈가 좀
작다.
• ALTER SESSION SET EVENTS ‘10053 trace name context forever, level {1 | 2}’;
• ALTER SESSION SET EVENTS '10053 trace name context off';
SQL 쿼리가 하드 파싱 될 때 10053 이벤트 Trace 파일이 만들어 지며 소프트 파싱이 되는
경우에는 생성되지 않는다.
Trace 파일을 찾기 쉽게 하려면 다음처럼 구분자를 지정하면 된다.
ALTER SESSION SET tracefile_identifier = ‘10053_TOPCREDU’;
5. Oracle Hint, Tuning_ 튜닝의 도구 : 10053 Event
[실습]
실습을 위한 PL/SQL 함수 생성
CREATE OR REPLACE FUNCTION ecount (
p_deptno IN emp.deptno%TYPE DEFAULT NULL)
RETURN NUMBER AS
v_sql VARCHAR2(500); v_cnt NUMBER;
BEGIN
v_sql := 'select count(empno) from emp e,
(select d.deptno, d.dname
from dept d
where d.deptno in (10, 20)) d
where d.deptno = e.deptno
and 1=1 ';
IF p_deptno IS NOT NULL THEN
v_sql := v_sql || 'AND e.deptno = :deptno ';
ELSE
v_sql := v_sql || 'AND ((1=1) OR :deptno IS NULL) ';
END IF;
DBMS_OUTPUT.PUT_LINE(v_sql);
--dynamic sql execution
EXECUTE IMMEDIATE v_sql INTO v_cnt USING p_deptno;
RETURN v_cnt;
END ecount;
/
6. Oracle Hint, Tuning_ 튜닝의 도구 : 10053 Event
SQL> show parameter optimizer --optimizer 관련 파라미터를 확인하자.
NAME TYPE VALUE
------------------------------------ ------- --------
_optimizer_cost_based_transformation string ON ON --비용기반 옵티마이저의 쿼리변환여무
optimizer_capture_sql_plan_baselines boolean FALSE
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 11.2.0.1
……
optimizer_mode string ALL_ROWS
optimizer_secure_view_merging boolean TRUE
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
-- 10053 이벤트를 걸고 Trace 파일을 생성하자.
SQL> ALTER SYSTEM FLUSH shared_pool;
SQL> ALTER SESSION SET EVENTS '10053 trace name context forever';
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
ecount(p_deptno=>10)); END;
/
SQL> ALTER SESSION SET EVENTS '10053 trace name context off';
SQL> SHOW PARAMETER user_dump_dest; --Trace파일 위치 확인