(오라클힌트/sql튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

22
오오오오오 / 오오 #24 Oracle 10053 Event CBO 오오 Query Transformation, Query Optimization 오오오 오오 오오오오 오오오오 오오오오 오오오오 오오오 , 오오오오오 (www.topcredu.co.kr)

Upload: 3-2

Post on 07-Jan-2017

641 views

Category:

Education


8 download

TRANSCRIPT

Page 1: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

오라클힌트 / 튜닝 #24Oracle 10053 Event

CBO 에서 Query Transformation, Query Opti-mization 과정을 거쳐 실행계획 생성하는 전과정을 모니터링

이종철 , 탑크리에듀(www.topcredu.co.kr)

Page 2: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

실습코드 및 다시보기는 다음 URL 에서 가능합니다 .

http://ojc.asia

Page 3: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

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)

Page 4: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

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)

Page 5: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

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)

Page 6: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

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.d-name 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 US-ING p_deptno; RETURN v_cnt;END ecount;/

Page 7: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

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)

Page 8: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

10053 Event 실습 - 4

-- 10053 이벤트를 걸고 Trace 파일을 생성하자 .SQL> ALTER SYSTEM FLUSH shared_pool;SQL> ALTER SESSION SET EVENTS '10053 trace name context forever';

SQL> SET SERVEROUTPUT ONSQL> 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)

Page 9: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 1-- DBMS 정보 , OS 정보 , SQL 을 실행한 클라이언트의 정보 표시

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 10: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 2-- Query Block 정보와 수행된 SQL 을 Parser 로부터 받아서 출력-- 예문은 여러 개의 쿼리블럭으로 구성되어 있다 .

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 11: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 3

-- 10053 이벤트에서 사용되는 용어 설명

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 12: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 4-- 옵티마이저의 기본 파라미터 정보 및 버그 픽스 정보

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 13: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 5.1

-- Query Transformation 과정출력( 쿼리블럭 마다 수행한다 .) MISC$1 블록은 쿼리변환이 없다 .

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 14: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 5.2

-- 쿼리블럭 SEL$1, SEL$2 는 View Merging 이 일어난 것을 확인할 수있다 .

-- count(dname) 부분이 count(*) 로 변환이 일어났음을 알수있다 .

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 15: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 5.3

-- FPD(Filter Push-Down) 이 발생한 것을 알수있다 .

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 16: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 6

-- 바인드 변수 정보 , 함수 호출시 p_deptno 를 10 으로 할당했다 .

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 17: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 7

-- 시스템 통계정보와 테이블과 인덱스의 통계정보를 출력

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 18: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 8

-- 통계정보에 따라조인 순서 결정-- DEPT 가 드라이빙

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 19: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 9

-- 조인방법에 따른 비용계산

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 20: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 10

-- 실행계획 , Predicate 정보 , 생성

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 21: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

Trace 파일 확인 – 11

-- 최종적으로 변형된 쿼리

이종철 , 탑크리에듀 (www.topcredu.co.kr)

Page 22: (오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트

This practice makes Expert!

PL/SQL단기속성 (1일완성 )SQL힌트 /튜닝 (단기 2일교육 )SQL기초과정