您可能想要保留由SQL跟踪工具为应用程序生成的统计信息的历史记录,并随时间进行比较。
TKPROF可以生成一个SQL脚本,该脚本创建一个表并向其中插入统计信息行。该脚本包含以下内容:
- 一个
CREATE TABLE是创建一个名为输出表语句TKPROF_TABLE。 INSERT将统计信息行(每个跟踪的SQL语句一个)添加到的语句TKPROF_TABLE。
运行后TKPROF,运行此脚本以将统计信息存储在数据库中。
本节包含以下主题:
- 生成TKPROF输出SQL脚本
运行时TKPROF,请使用INSERT参数指定生成的SQL脚本的名称。 - 编辑TKPROF输出SQL脚本
之后TKPROF创建了SQL脚本,你可能想在运行它之前编辑脚本。 - 查询输出表
创建输出表后,使用SELECT语句进行查询。
22.4.4.1生成TKPROF输出SQL脚本
运行时TKPROF,使用INSERT参数指定生成的SQL脚本的名称。
如果省略该INSERT参数,则TKPROF不会生成脚本。
22.4.4.2编辑TKPROF输出SQL脚本
之后TKPROF创建了SQL脚本,你可以运行它之前要编辑的脚本。
如果您已经为先前收集的统计信息创建了一个输出表,并且想要向该表添加新的统计信息,CREATE TABLE则从脚本中删除该语句。然后,脚本将新行插入现有表中。如果创建了多个输出表,也许要将不同数据库中的统计信息存储在不同的表中,请编辑CREATE TABLEand INSERT语句以更改输出表的名称。
22.4.4.3查询输出表
创建输出表后,使用SELECT语句查询。
以下CREATE TABLE语句创建TKPROF_TABLE:
CREATE TABLE TKPROF_TABLE (
DATE_OF_INSERT DATE,
CURSOR_NUM NUMBER,
DEPTH NUMBER,
USER_ID NUMBER,
PARSE_CNT NUMBER,
PARSE_CPU NUMBER,
PARSE_ELAP NUMBER,
PARSE_DISK NUMBER,
PARSE_QUERY NUMBER,
PARSE_CURRENT NUMBER,
PARSE_MISS NUMBER,
EXE_COUNT NUMBER,
EXE_CPU NUMBER,
EXE_ELAP NUMBER,
EXE_DISK NUMBER,
EXE_QUERY NUMBER,
EXE_CURRENT NUMBER,
EXE_MISS NUMBER,
EXE_ROWS NUMBER,
FETCH_COUNT NUMBER,
FETCH_CPU NUMBER,
FETCH_ELAP NUMBER,
FETCH_DISK NUMBER,
FETCH_QUERY NUMBER,
FETCH_CURRENT NUMBER,
FETCH_ROWS NUMBER,
CLOCK_TICKS NUMBER,
SQL_STATEMENT LONG);大多数输出表列直接对应于格式化输出文件中显示的统计信息。例如,PARSE_CNT列值对应于输出文件中解析步骤的计数统计信息。
下表中的列可帮助您识别统计信息。
表22-2标识一行统计信息的TKPROF_TABLE列
| 例 | 描述 |
|---|---|
| 这是SQL跟踪工具为其收集统计信息行的SQL语句。由于此列具有数据类型 |
| 这是将行插入表中的日期和时间。该值与SQL跟踪工具收集统计信息的时间不同。 |
| 这表明发出SQL语句的递归级别。例如,值0表示用户发出了该语句。值为1表示Oracle数据库生成该语句作为递归调用,以处理值为0的语句(由用户发出的语句)。值n表示Oracle数据库生成该语句作为递归调用,以处理值为n -1 的语句。 |
| 这标识了发出该语句的用户。此值也出现在格式化的输出文件中。 |
| Oracle数据库使用此列值来跟踪分配给每个SQL语句的游标。 |
输出表不存储语句的执行计划。以下查询从输出表返回统计信息。这些统计信息与“ 示例22-7 ”中所示的格式化输出相对应。
SELECT * FROM TKPROF_TABLE;
示例输出如下所示:
DATE_OF_INSERT CURSOR_NUM DEPTH USER_ID PARSE_CNT PARSE_CPU PARSE_ELAP
-------------- ---------- ----- ------- --------- --------- ----------
21-DEC-2017 1 0 8 1 16 22
PARSE_DISK PARSE_QUERY PARSE_CURRENT PARSE_MISS EXE_COUNT EXE_CPU
---------- ----------- ------------- ---------- --------- -------
3 11 0 1 1 0
EXE_ELAP EXE_DISK EXE_QUERY EXE_CURRENT EXE_MISS EXE_ROWS FETCH_COUNT
-------- -------- --------- ----------- -------- -------- -----------
0 0 0 0 0 0 1
FETCH_CPU FETCH_ELAP FETCH_DISK FETCH_QUERY FETCH_CURRENT FETCH_ROWS
--------- ---------- ---------- ----------- ------------- ----------
2 20 2 2 4 10
SQL_STATEMENT
---------------------------------------------------------------------
SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO 



