SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
10053 Event ?- 1
• Explain Plan, GATHER_PLAN_STATISTICS 힌트, DBMS_XPLAN 패키지를 이용해서 CBO의
SQL 실행계획을 확인할 수 있지만 10053 이벤트를 이용하면 보다 구체적으로 CBO의 쿼
리변환, 최적화 과정을 시간순으로 모니터링 할 수 있다.
• 점점 발전하는 CBO의 쿼리실행을 위한 전과정을 확인 가능한데 Query Transformation,
Query Optimization을 과정을 Trace 파일로 제공한다. Trace 파일의 위치는 show
parameter user_dump_dest로 확인 가능하다.
이종철, 탑크리에듀(www.topcredu.co.kr)
4.
10053 Event ?- 2
• DBMS_XPLAN등에서 확인 할 수 없는 PL/SQL 함수 호출에 대해서도 확인이 가능하다.
• CBO에서 쿼리 수행을 위한 전과정을 시간순으로 모니터링 할 수 있는데 아래 내용들을
확인할 수 있다.
• Optimizer가 참조하는 기본 환경설정 파라미터 값 및 Bug Fix에 대한 내용
• Query Transformation 전 과정
• Query Optimization 전 과정(시스템/테이블 통계정보등을 이용해서 Access Path, Join Type을 결정하
는 모든 과정에 대해 확인할 수 있다.)
• Transformation 수행을 비용(COST)을 기반으로 하는 CBQT(Cost Based Query
Transformation)를 확인할 수 있다.
이종철, 탑크리에듀(www.topcredu.co.kr)
5.
10053 Event ?- 3
• 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’;
이종철, 탑크리에듀(www.topcredu.co.kr)
6.
10053 Event 실습- 1
• 실습을 위한 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 ';
이종철, 탑크리에듀(www.topcredu.co.kr)
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;
/
7.
10053 Event 실습- 2
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
이종철, 탑크리에듀(www.topcredu.co.kr)
8.
10053 Event 실습- 4
-- 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파일 위치 확인
이종철, 탑크리에듀(www.topcredu.co.kr)
9.
Trace 파일 확인– 1
-- DBMS정보, OS정보, SQL을 실행한 클라이언트의 정보 표시
이종철, 탑크리에듀(www.topcredu.co.kr)
10.
Trace 파일 확인– 2
-- Query Block 정보와 수행된 SQL을 Parser로부터 받아서 출력
-- 예문은 여러 개의 쿼리블럭으로 구성되어 있다.
이종철, 탑크리에듀(www.topcredu.co.kr)
11.
Trace 파일 확인– 3
-- 10053 이벤트에서
사용되는 용어 설명
이종철, 탑크리에듀(www.topcredu.co.kr)
12.
Trace 파일 확인– 4
-- 옵티마이저의 기본 파라미터 정보 및 버그 픽스 정보
이종철, 탑크리에듀(www.topcredu.co.kr)
13.
Trace 파일 확인– 5.1
-- Query Transformation 과정출력
(쿼리블럭 마다 수행한다.)
MISC$1 블록은 쿼리변환이 없다.
이종철, 탑크리에듀(www.topcredu.co.kr)
14.
Trace 파일 확인– 5.2
-- 쿼리블럭 SEL$1,
SEL$2는 View Merging이
일어난 것을 확인할 수있
다.
-- count(dname) 부분이
count(*)로 변환이 일어
났음을 알수있다.
이종철, 탑크리에듀(www.topcredu.co.kr)
15.
Trace 파일 확인– 5.3
-- FPD(Filter Push-Down)
이 발생한 것을 알수있다.
이종철, 탑크리에듀(www.topcredu.co.kr)
16.
Trace 파일 확인– 6
-- 바인드 변수 정보, 함수 호출시 p_deptno를 10으로 할당했다.
이종철, 탑크리에듀(www.topcredu.co.kr)
17.
Trace 파일 확인– 7
-- 시스템 통계정보와 테이블과
인덱스의 통계정보를 출력
이종철, 탑크리에듀(www.topcredu.co.kr)
18.
Trace 파일 확인– 8
-- 통계정보에 따라
조인 순서 결정
-- DEPT가 드라이빙
이종철, 탑크리에듀(www.topcredu.co.kr)
19.
Trace 파일 확인– 9
-- 조인방법에 따른 비용계산
이종철, 탑크리에듀(www.topcredu.co.kr)
20.
Trace 파일 확인– 10
-- 실행계획, Predicate정보, 생성
이종철, 탑크리에듀(www.topcredu.co.kr)
21.
Trace 파일 확인– 11
-- 최종적으로 변형된 쿼리
이종철, 탑크리에듀(www.topcredu.co.kr)