programing

Oracle 11GR2 TKPROF - 재귀적 콜 트리를 캡처하는 방법

instargram 2023. 10. 4. 20:55
반응형

Oracle 11GR2 TKPROF - 재귀적 콜 트리를 캡처하는 방법

객관적으로

TKPROF 출력(SYS=YES 지정)에서 재귀 호출 트리를 시각적으로 캡처하는 방법을 알아봅니다.

환경

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64비트 프로덕션
DELL Latitude 코어 i72.8의 Windows 7 64비트GHz 8G 메모리 & SSD HDD

배경

Oacle 11G - 삽입 시 인덱싱의 성능 효과 질문과 같이 인덱싱의 효과와 성능 지표를 이해하려고 합니다.

인덱싱을 위해 장면 뒤에서 무슨 일이 일어나고 있는지 자세히 파악하려면 create index 문에서 SQL 추적을 실행합니다.

실행

인덱스 생성에 대한 추적(SQL 아래쪽)을 실행하고 " sys= yes" 옵션을 사용하여 tkprof를 실행합니다.

SQL> ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) ;
Table altered.
Elapsed: 00:00:01.75

> trcsess clientid="CREATE_INDEX" output="report_createindex.trc" *.trc
> tkprof createindex.trc output=createindex.txt sys=yes

질문.

tkprof 또는 다른 도구를 사용하여 추적(.trc) 파일에서 계획 설명과 같이 호출 계층을 시각적으로 캡처할 수 있는 방법이 있는지 알고 싶습니다.

생성된 보고서에는 "INDEX BUILD UNIQUE"를 유도하는 "ALTER TABL2 ADD"와 같은 재귀적 호출 및 경로 아래에 있는 추가 sys 재귀적 호출이 포함됩니다.출력이 호출 계층(부모가 먼저이고 자식이 바로 뒤에 있음)을 반영하지 않는다고 가정합니다.

TKPROPE 출력

SQL ID: 2w9c2khpsfj4m
Plan Hash: 3219312727
CREATE UNIQUE INDEX "TRY"."PK_TBL2_COL1" on "TRY"."TBL2"("COL1") NOPARALLEL


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          1          0           0
Execute      1      0.63       0.84       2999      15565       3173           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.63       0.85       2999      15566       3173           0

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 106     (recursive depth: 1)  <----------------- child?

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  INDEX BUILD UNIQUE PK_TBL2_COL1 (cr=15904 pr=3003 pw=2090 time=0 us)(object id 0)
1000000   SORT CREATE INDEX (cr=15486 pr=2997 pw=0 time=208370 us)
1000000    TABLE ACCESS FULL TBL2 (cr=15486 pr=2997 pw=0 time=245360 us cost=4413 size=5000000 card=1000000)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                       575        0.00          0.08
  db file scattered read                        138        0.00          0.07
  direct path write                               1        0.00          0.00
********************************************************************************

SQL ID: 47f85g3cmftry
Plan Hash: 0
ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) 

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.20       0.64      15630      29477          3           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.20       0.64      15630      29477          3           0

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 106  <------------------------------------------ parent?

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                         4        0.00          0.00
  db file scattered read                        259        0.01          0.42
  db file parallel read                           2        0.00          0.00
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        0.00          0.00
********************************************************************************

SQL

CREATE TABLE TBL2 (
    "COL1" NUMBER,
    "COL2" VARCHAR2(100 BYTE)
    -- CONSTRAINT "PK_TBL2_COL1" PRIMARY KEY ("COL1")
);
INSERT INTO TBL2 /*+ APPEND MONITOR GATHER_PLAN_STATISTICS CONNECTBY_INSERT */
SELECT LEVEL, rpad(TO_CHAR(LEVEL),100,'A') FROM DUAL CONNECT BY LEVEL <= 1000000
COMMIT;    
---------------------------------------------------------------------------
-- Flush the buffers and clear the caches.
---------------------------------------------------------------------------
ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;
ALTER SYSTEM SWITCH LOGFILE;
---------------------------------------------------------------------------
-- Start monitoring
---------------------------------------------------------------------------
ALTER SESSION SET TRACEFILE_IDENTIFIER ='CREATE_INDEX';
ALTER SESSION SET TIMED_STATISTICS=true;
BEGIN
  DBMS_SESSION.SET_IDENTIFIER('CREATE_INDEX');
  DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE('CREATE_INDEX', waits=>true, binds=>false);
  DBMS_MONITOR.CLIENT_ID_STAT_ENABLE('CREATE_INDEX');
END;
/
---------------------------------------------------------------------------
-- Run the SQL to insert and monitor
---------------------------------------------------------------------------
SET PAGESIZE 200 
SET LINESIZE 200
SET TIMING ON
SET ECHO ON
SET AUTOTRACE ON

ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) ;

SET AUTOTRACE OFF
SET ECHO OFF
SET TIMING OFF
---------------------------------------------------------------------------
-- Stop monitoring.
---------------------------------------------------------------------------
BEGIN
  DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE('CREATE_INDEX');
  DBMS_MONITOR.CLIENT_ID_STAT_DISABLE('CREATE_INDEX');
END;
/

참고문헌

때때로 사용자가 발행한 SQL 문을 실행하려면 Oracle Database에서 추가 문을 발행해야 합니다. ...

SQL Trace 기능이 활성화된 상태에서 재귀 호출이 발생하면 TKPROF는 재귀 SQL 문에 대한 통계를 생성하고 출력 파일에 재귀 SQL 문으로 명확하게 표시합니다.

추적 분석기를 추천합니다.Oracle 지원에서 다운로드할 수 있습니다.TRCANLZR (TRCA) : SQL_TRACE/Event 10046 Trace File Analyzer - Raw SQL Trace 해석 도구 (Doc ID 224270.1)

추적 분석기에는 재귀적 SQL의 트리와 같은 뷰를 보여주는 "SQL 계보" 장이 있습니다.

추적 분석기가 설치되면 다음과 같이 호출합니다.

@trcanlzr <name of tracefile>

클라이언트에서 원격으로 이 작업을 수행할 수도 있습니다(trcanlzr.sql 스크립트를 로컬 SQLPATH에 복사).최종적으로 분석 내용이 포함된 HTML 파일을 클라이언트 컴퓨터에 복사합니다.

@Jan의 정보를 바탕으로 TRCA를 실행합니다.SQL 계보가 콜 계층 및 내역인 것은 이해하지만, 제안/수정 사항을 제공해주시기 바랍니다.

SQL

SET AUTOTRACE OFF
SET ECHO ON
SET TIMING OFF

DROP TABLE TBL2 PURGE;
CREATE TABLE TBL2 (
    "COL1" NUMBER,
    "COL2" VARCHAR2(100 BYTE)
    -- CONSTRAINT "PK_TBL2_COL1" PRIMARY KEY ("COL1")
);
INSERT INTO TBL2 /*+ APPEND MONITOR GATHER_PLAN_STATISTICS CONNECTBY_INSERT */
SELECT LEVEL, rpad(TO_CHAR(LEVEL),100,'A') FROM DUAL CONNECT BY LEVEL <= 1000000;
COMMIT;    
---------------------------------------------------------------------------
-- Start monitoring
---------------------------------------------------------------------------
ALTER SESSION SET TRACEFILE_IDENTIFIER ='CREATE_INDEX';
ALTER SESSION SET TIMED_STATISTICS=TRUE;
alter session set events '10046 trace name context forever, level 8';

---------------------------------------------------------------------------
-- Run the SQL to insert and monitor
---------------------------------------------------------------------------
ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) ;

---------------------------------------------------------------------------
-- Stop monitoring.
---------------------------------------------------------------------------
alter session set events '10046 trace name context off'; 

TRCA

@run/trcanlzr.sql nr_ora_6976_CREATE_INDEX.trc

상위 SQL(CPU)

enter image description here

SQL 계보

enter image description here

추적 파일을 분석할 때 orasrp를 사용합니다.그것은 읽기 쉬운 형태로 계층 구조 계획을 가진 html 보고서를 생성합니다.또한 사용이 용이한 (콘솔) -

orasrp in_trace.trc out_report.html

언급URL : https://stackoverflow.com/questions/31227978/oracle-11gr2-tkprof-how-to-capture-the-recursive-call-tree

반응형