Oracle 11GR2 TKPROF - 如何捕获递归调用树

mon*_*mon 11 oracle recursion trace oracle11g oracle11gr2

目的

找出一种在TKPROF输出中可视化捕获递归调用树的方法(指定SYS = YES).

环境

Oracle Database 11g企业版11.2.0.1.0版 - 64位生产
Windows 7 64位DELL Latitude核心i7 2.8GHz 8G内存和SSD硬盘

背景

我正在尝试理解索引和性能指示的影响,如问题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
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以使用tkprof或其他工具从trace(.trc)文件中捕获调用层次结构,如解释计划.

生成的报告包括递归调用,例如"ALTER TABLE TBL2 ADD",导致"INDEX BUILD UNIQUE",并且可能还有进一步的sys递归调用.我想输出不会反映出调用层次结构(父亲优先,紧随其后的子节点).

TKPROF输出

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
********************************************************************************
Run Code Online (Sandbox Code Playgroud)

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;
/
Run Code Online (Sandbox Code Playgroud)

参考

有时,要执行用户发出的SQL语句,Oracle数据库必须发出其他语句....

如果在启用SQL跟踪工具时发生递归调用,则TKPROF会为递归SQL语句生成统计信息,并在输出文件中将它们清楚地标记为递归SQL语句.

Jan*_*Jan 3

我推荐跟踪分析仪。您可以从 oracle 支持下载它。TRCANLZR (TRCA):SQL_TRACE/Event 10046 跟踪文件分析器 - 用于解释原始 SQL 跟踪的工具(文档 ID 224270.1)

跟踪分析器具有“SQL 谱系”一章,其中显示了递归 SQL 的树状视图。

安装跟踪分析器后,您可以使用以下命令调用它

@trcanlzr <name of tracefile>
Run Code Online (Sandbox Code Playgroud)

您甚至可以从客户端远程执行此操作(将 trcanlzr.sql 脚本复制到本地 SQLPATH)。它最终会将包含分析的 html 文件复制到您的客户端计算机。

  • 有很多信息,但只有一个问题:“我想知道是否有一种方法可以直观地捕获调用层次结构,例如使用 tkprof 或其他工具从跟踪 (.trc) 文件中解释计划。” 我就是这么回答的。我不知道为什么提供所有其他信息,因为跟踪文件的创建方式以及为什么回答这个问题并不重要。 (2认同)