暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 步骤4:存储SQL跟踪功能统计信息

原创 Asher.HU 2021-02-04
712

 

您可能想要保留由SQL跟踪工具为应用程序生成的统计信息的历史记录,并随时间进行比较。

TKPROF可以生成一个SQL脚本,该脚本创建一个表并向其中插入统计信息行。该脚本包含以下内容:

  • 一个CREATE TABLE是创建一个名为输出表语句TKPROF_TABLE
  • INSERT将统计信息行(每个跟踪的SQL语句一个)添加到的语句TKPROF_TABLE

运行后TKPROF,运行此脚本以将统计信息存储在数据库中。

本节包含以下主题:

 

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_STATEMENT

这是SQL跟踪工具为其收集统计信息行的SQL语句。由于此列具有数据类型LONG,因此不能在表达式或WHERE子句条件中使用它

DATE_OF_INSERT

这是将行插入表中的日期和时间。该值与SQL跟踪工具收集统计信息的时间不同。

DEPTH

这表明发出SQL语句的递归级别。例如,值0表示用户发出了该语句。值为1表示Oracle数据库生成该语句作为递归调用,以处理值为0的语句(由用户发出的语句)。n表示Oracle数据库生成该语句作为递归调用,以处理值为n -1 的语句

USER_ID

这标识了发出该语句的用户。此值也出现在格式化的输出文件中。

CURSOR_NUM

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 
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论