Oracle/Tuning2018. 10. 17. 17:53

DBMS_APPLICATION_INFO.SET_MODULE 프로시저를 사용하면 PL/SQL 코드의 성능을 간편하게 측정할 수 있다. 관련 내용을 살펴보자.


아래와 같은 패턴으로 PL/SQL 코드를 실행하면 된다.
-- 1
ALTER SESSION SET STATISTICS_LEVEL = ALL;
EXEC DBMS_APPLICATION_INFO.SET_MODULE ('M1', 'A1');

BEGIN
    FOR c1 IN (SELECT * FROM dept) LOOP
        FOR c2 IN (SELECT * FROM emp WHERE deptno = c1.deptno) LOOP
            NULL;
        END LOOP c2;
    END LOOP c1;
END;
/

EXEC DBMS_APPLICATION_INFO.SET_MODULE (NULL, NULL);
ALTER SESSION SET STATISTICS_LEVEL = TYPICAL;

DBMS_XPLAN.DISPLAY_CURSOR 프로시저를 사용하면 PL/SQL 코드에서 수행된 SQL의 실행 통계를 확인할 수 있다.
-- 2
SELECT b.plan_table_output
  FROM (SELECT   sql_id, child_number
            FROM v$sql
           WHERE module = 'M1'
             AND action = 'A1'
             AND plan_hash_value <> 0
        ORDER BY last_active_time) a
     , TABLE (DBMS_XPLAN.DISPLAY_CURSOR (a.sql_id, a.child_number, 'ALLSTATS')) b;


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------
SQL_ID  0ws4zp45rdbtm, child number 0

SELECT * FROM DEPT

Plan hash value: 3383998547

------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |      4 |00:00:00.01 |       7 |
|   1 |  TABLE ACCESS FULL| DEPT |      1 |      4 |      4 |00:00:00.01 |       7 |
------------------------------------------------------------------------------------

SQL_ID  f81g49vq62w9u, child number 0
-------------------------------------
SELECT * FROM EMP WHERE DEPTNO = :B1

Plan hash value: 2141393120

--------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |        |      4 |        |     14 |00:00:00.01 |       7 |
|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| EMP    |      4 |      3 |     14 |00:00:00.01 |       7 |
|*  2 |   INDEX RANGE SCAN                  | EMP_X1 |      4 |      3 |     14 |00:00:00.01 |       4 |
--------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("DEPTNO"=:B1)
-------------------------------------

32 행이 선택되었습니다.



'Oracle > Tuning' 카테고리의 다른 글

사용자 정의 함수의 실행 계획  (0) 2018.10.27
트레이스 파일 병합  (0) 2018.10.27
Star Transformation 쿼리 변환  (0) 2018.10.16
Partition-Wise 조인  (0) 2018.10.14
IOT Secondary 인덱스  (0) 2018.10.08
Posted by 정희락_