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

Oracle 19C TKPROF

原创 Asher.HU 2021-02-04
976

22.6.2 TKPROF

TKPROF程序格式化跟踪文件的内容,并将输出放入可读的输出文件中。

TKPROF还可以执行以下操作:

  • 创建一个将统计信息存储在数据库中的SQL脚本
  • 确定SQL语句的执行计划

    注意:

    如果未关闭SQL语句的游标,则TKPROF输出不会自动包含SQL语句的实际执行计划。在这种情况下,请将该EXPLAIN选项与TKPROF一起使用以生成执行计划。

TKPROF报告执行的每个语句及其消耗的资源,被调用的次数以及所处理的行数。



本节包含以下主题:

 

22.6.2.1目的

TKPROF可以找到消耗最大资源的语句。

有了可用的基准,您可以评估所执行的工作是否合理。

 

22.6.2.2准则

输入和输出文件是唯一必需的参数。

如果您在不带参数的情况下调用TKPROF,则该工具将显示联机帮助。

 

22.6.2.3语法

tkprof input_file output_file
  [ waits=yes|no ] 
  [ sort=option ] 
  [ print=n ]
  [ aggregate=yes|no ] 
  [ insert=filename3 ] 
  [ sys=yes|no ]
  [ table=schema.table ]
  [ explain=user/password ] 
  [ record=filename4 ] 
  [ width=n ]
复制

 

22.6.2.4选项

TKPROF支持许多命令行选项。

表22-3 TKPROF参数

参数描述

input_file

指定输入文件,一个跟踪文件,其中包含SQL跟踪工具生成的统计信息。该文件可以是为单个会话生成的跟踪文件,也可以是通过将来自多个会话的单个跟踪文件串联而生成的文件。

output_file

指定要TKPROF写入其格式输出的文件

WAITS

指定是否为在跟踪文件中找到的任何等待事件记录摘要。有效值为YES(默认)和NO

SORT

在输出文件中列出跟踪的SQL语句之前,先按指定的排序选项的降序对其进行排序。如果指定了多个选项,则输出将按照排序选项中指定的值之和以降序排序。如果省略此参数,则TKPROF按照第一次使用的顺序将语句列出到输出文件中。排序选项如下:

  • PRSCNT -解析次数
  • PRSCPU -花在解析上的CPU时间
  • PRSELA -花费的解析时间
  • PRSDSK -解析期间从磁盘物理读取的次数
  • PRSQRY -解析期间一致模式块读取的次数
  • PRSCU -解析期间当前模式块读取的次数
  • PRSMIS -解析期间库高速缓存未命中数
  • EXECNT -执行次数
  • EXECPU -执行所花费的CPU时间
  • EXEELA -执行所花费的时间
  • EXEDSK -执行期间从磁盘物理读取的次数
  • EXEQRY -执行期间读取一致模式块的次数
  • EXECU -执行期间当前模式块的读取次数
  • EXEROW -执行期间处理的行数
  • EXEMIS -执行期间库高速缓存未命中数
  • FCHCNT -提取次数
  • FCHCPU -花费的CPU时间
  • FCHELA -提取所用的时间
  • FCHDSK -提取期间从磁盘物理读取的次数
  • FCHQRY -提取期间一致模式块读取的次数
  • FCHCU -提取期间当前模式块的读取次数
  • FCHROW -获取的行数
  • USERID -解析光标的用户ID

PRINT

仅列出输出文件中第一个整数排序的SQL语句。如果省略此参数,则TKPROF列出所有跟踪的SQL语句。此参数不会影响可选的SQL脚本。SQL脚本始终为所有跟踪的SQL语句生成插入数据。

AGGREGATE

如果指定AGGREGATE= NO,则TKPROF不会聚合同一SQL文本的多个用户。

INSERT

创建一个SQL脚本,将跟踪文件统计信息存储在数据库中。TKPROF用名称创建这个脚本filename3该脚本创建一个表,并将每个跟踪的SQL语句的统计信息行插入表中。

SYS

启用和禁用由用户发出的SQL语句SYS或递归SQL语句在输出文件中的列表。YES原因的默认值TKPROF列出这些语句。NO原因TKPROF可以忽略它们。此参数不会影响可选的SQL脚本。SQL脚本始终为所有跟踪的SQL语句(包括递归SQL语句)插入统计信息。

TABLE

指定在TKPROF将执行计划写入输出文件之前临时放置执行计划的表的模式和名称如果指定的表存在,则TKPROF删除表中的所有行,将其用于EXPLAIN PLAN语句(将更多行写入表中),然后删除这些行。如果该表不存在,则TKPROF创建它,使用它,然后删除它。

指定的用户必须能够发出INSERTSELECT以及DELETE对表的语句。如果该表不存在,那么用户还必须能够发出CREATE TABLEDROP TABLE声明。

此选项使多个用户可以TKPROF使用值中的同一数据库用户帐户并发运行EXPLAIN这些用户可以指定不同的TABLE值,并避免在处理临时计划表时造成破坏性的干扰。

TKPROF 支持以下组合:

  • EXPLAIN没有参数TABLE的参数

    TKPROFPROF$PLAN_TABLEEXPLAIN参数 指定的用户的模式中使用表

  • TABLE没有参数EXPLAIN的参数

    TKPROF忽略TABLE参数。

如果不存在计划表,则TKPROF创建该表PROF$PLAN_TABLE,然后将其放在最后。

EXPLAIN

确定跟踪文件中每个SQL语句的执行计划,并将这些执行计划写入输出文件。TKPROF还显示执行计划的每个步骤处理的行数。

TKPROFEXPLAIN PLAN使用此参数中指定的用户名和密码连接到Oracle数据库后,通过发出语句来确定执行计划指定的用户必须具有CREATE SESSION系统特权。TKPROF如果使用该EXPLAIN选项,则需要更长的时间来处理较大的跟踪文件

注意:实例启动后立即生成的跟踪文件包含反映启动过程活动的数据。特别是,当系统全局区域(SGA)中的缓存被填充时,它们反映出不成比例的I / O活动。为了进行调整,请忽略此类跟踪文件。

RECORD

filename使用跟踪文件中的所有非递归SQL 创建带有指定的SQL脚本您可以使用此脚本从跟踪文件重播用户事件。

WIDTH

一个整数,用于控制某些TKPROF输出的输出线宽,例如解释计划。此参数对于TKPROF输出的后处理很有用

 


22.6.2.5输出

本节说明TKPROF输出。

本节包含以下主题:

 

22.6.2.5.1在TKPROF中发出SQL语句的用户的标识

TKPROF 列出发出每个SQL语句的用户的用户ID。

如果SQL Trace输入文件包含来自多个用户的统计信息,并且该语句是由多个用户发出的,则TKPROF列出最后一个要解析该语句的用户的ID。所有数据库用户的用户ID出现在列的数据字典中ALL_USERSUSER_ID

 

22.6.2.5.2 TKPROF中的表格统计

TKPROF在行和列中列出了SQL跟踪工具返回的SQL语句的统计信息。

每行对应于SQL语句处理的三个步骤之一。统计信息由该CALL的值标识请参阅表22-4

表22-4 CALL列值

通话价值含义

PARSE

将SQL语句转换为执行计划,包括检查适当的安全授权以及检查表,列和其他引用对象的存在。

EXECUTE

Oracle数据库实际执行该语句。对于INSERTUPDATEDELETE,和MERGE语句,这会修改数据。对于SELECT语句,它标识选定的行。

FETCH

检索查询返回的行。提取仅针对SELECT语句执行

SQL Trace工具输出的其他列是语句的所有解析,执行和提取的组合统计信息。的总和querycurrent被访问缓冲器的总数,也被称为逻辑I / O(LIOS)。请参阅表22-5


表22-5用于分析,执行和提取的SQL跟踪统计信息。

SQL跟踪统计含义

COUNT

语句被解析,执行或获取的次数。

CPU

所有对该语句的解析,执行或获取调用的CPU总时间(以秒为单位)。如果TIMED_STATISTICS未启用,则该值为零(0)

ELAPSED

该语句的所有解析,执行或提取调用的总经过时间(以秒为单位)。如果TIMED_STATISTICS未启用,则该值为零(0)

DISK

从磁盘上的数据文件实际读取的,用于所有解析,执行或获取调用的数据块总数。

QUERY

在所有解析,执行或提取调用中,以一致模式检索的缓冲区总数。通常,以一致的方式检索缓冲区以进行查询。

CURRENT

当前模式下检索到的缓冲区总数。缓冲区在电流模式中检索的语句,例如INSERTUPDATE,和DELETE

有关已处理行的统计信息显示在该ROWS列中。该列显示了SQL语句处理的行数。此总数不包括由SQL语句的子查询处理的行。对于SELECT语句,将在获取步骤中显示返回的行数。对于UPDATEDELETEINSERT语句,将为执行步骤显示已处理的行数。

注意:

当关闭游标时,将显示行源计数。在SQL * Plus中,只有一个用户游标,因此执行的每个语句都会导致前一个游标被关闭;因此,将显示行源计数。PL / SQL具有自己的游标处理,并且在关闭父游标时不会关闭子游标。退出或重新连接将显示计数。

 

22.6.2.5.3 TKPROF中的库高速缓存未命中

TKPROF还列出了每个SQL语句的解析和执行步骤所导致的库高速缓存未命中数。

这些统计信息显示在表格统计信息之后的不同行上。如果该语句未导致任何库高速缓存未命中,TKPROF则不列出该统计信息。 示例 ”中,该语句导致解析步骤一个库高速缓存未命中,而执行步骤没有未命中。

 

22.6.2.5.4 TKPROF中的行源操作

在TKPROF输出中,行源操作显示对行执行的每个操作处理的行数,以及其他行源信息,例如物理读取和写入。

表22-6行源操作

行源操作含义

cr

行源执行的读取一致。

r

行源执行的物理读取

w

行源执行的物理写入

time

时间(以微秒为单位)

在下面的示例TKPROF输出,请注意crrw,和time行来源操作列下的值:

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  DELETE  (cr=43141 r=266947 w=25854 time=60235565 us)
  28144   HASH JOIN ANTI (cr=43057 r=262332 w=25854 time=48830056 us)
  51427    TABLE ACCESS FULL STATS$SQLTEXT (cr=3465 r=3463 w=0 time=865083 us)
 647529    INDEX FAST FULL SCAN STATS$SQL_SUMMARY_PK 
                      (cr=39592 r=39325 w=0 time=10522877 us) (object id 7409)
复制

 

22.6.2.5.5 TKPROF中的等待事件信息

如果存在等待事件信息,则TKPROF输出将包含有关等待事件的部分。

输出看起来类似于以下内容:

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                      8084        0.12          5.34
  direct path write                             834        0.00          0.00
  direct path write temp                        834        0.00          0.05
  db file parallel read                           8        1.53          5.51
  db file scattered read                       4180        0.07          1.45
  direct path read                             7082        0.00          0.05
  direct path read temp                        7082        0.00          0.44
  rdbms ipc reply                                20        0.00          0.01
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        0.00          0.00
复制

另外,在文件末尾,整个跟踪文件的等待事件被汇总。

为确保将等待事件信息写入会话的跟踪文件,请运行以下SQL语句:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
复制

 

22.6.2.6示例

本节演示了常见的TKPROF用例。

示例22-4打印资源占用最大的语句

如果要使用SORT参数和PRINT参数的组合来处理大型跟踪文件,则可以生成TKPROF仅包含资源占用最大的语句输出文件。以下语句在跟踪文件中显示生成最多物理I / O的10条语句:

TKPROF ora53269.trc ora53269.prf SORT = (PRSDSK, EXEDSK, FCHDSK) PRINT = 10
复制

示例22-5生成SQL脚本

本示例运行TKPROF,接受名为的跟踪文件examp12_jane_fg_sqlplus_007.trc,并编写名为的格式化输出文件outputa.prf

TKPROF examp12_jane_fg_sqlplus_007.trc OUTPUTA.PRF EXPLAIN=hr TABLE=hr.temp_plan_table_a INSERT=STOREA.SQL SYS=NO
SORT=(EXECPU,FCHCPU)
复制

此示例可能比屏幕上的一行长,并且您可能需要使用连续字符,具体取决于操作系统。

请注意此示例中的其他参数:

  • EXPLAIN值导致TKPROF以用户身份连接,hr并使用该EXPLAIN PLAN语句为每个跟踪的SQL语句生成执行计划。您可以使用它来获取访问路径和行源计数。

    注意:

    如果未关闭SQL语句的游标,则TKPROF输出不会自动包含SQL语句的实际执行计划。在这种情况下,您可以将EXPLAIN选项与TKPROF用于生成执行计划。

  • TABLE值会导致TKPROF使用该表temp_plan_table_a在架构中scott作为临时计划表。
  • INSERT值导致TKPROF生成名为的SQL脚本STOREASQL在数据库中存储所有跟踪的SQL语句的统计信息。
  • SYS带有NOcause 参数TKPROF将省略输出文件中的递归SQL语句。这样,您可以忽略内部Oracle数据库语句,例如临时表操作。
  • SORT值使TKPROFSQL语句按照执行所花费的CPU时间和在将行写入输出文件之前获取行所花费的CPU时间之和的顺序进行排序。为了获得最大的效率,请始终使用SORT参数。

示例22-6 TKPROF标头


本示例显示了TKPROF报告的示例标题。

TKPROF: Release 12.1.0.0.2
 
Copyright (c) 1982, 2012, Oracle and/or its affiliates.  All rights reserved.
 
Trace file: /disk1/oracle/log/diag/rdbms/orcla/orcla/trace/orcla_ora_917.trc
Sort options: default
 
********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
********************************************************************************
复制


示例22-7 TKPROF主体

本示例显示了TKPROF报告的示例正文。

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.01       0.00          0          0          0           0

Misses in library cache during parse: 1
Optimizer mode: FIRST_ROWS
Parsing user id: 44  

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1       28.59         28.59
********************************************************************************

select condition 
from
 cdef$ where rowid=:1

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

Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: SYS   (recursive depth: 1)

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS BY USER ROWID OBJ#(31) (cr=1 r=0 w=0 time=151 us)

********************************************************************************

SELECT last_name, job_id, salary
  FROM employees
WHERE salary =
  (SELECT max(salary) FROM employees)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.02       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0         15          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.02       0.01          0         15          0           1

Misses in library cache during parse: 1
Optimizer mode: FIRST_ROWS
Parsing user id: 44  

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS FULL EMPLOYEES (cr=15 r=0 w=0 time=1743 us)
      1   SORT AGGREGATE (cr=7 r=0 w=0 time=777 us)
    107    TABLE ACCESS FULL EMPLOYEES (cr=7 r=0 w=0 time=655 us)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        9.62          9.62
********************************************************************************

********************************************************************************
 delete
         from stats$sqltext st
        where (hash_value, text_subset) not in
             (select --+ hash_aj
                     hash_value, text_subset
                from stats$sql_summary ss
               where (   (   snap_id     < :lo_snap
                          or snap_id     > :hi_snap
                         )
                         and dbid            = :dbid
                         and instance_number = :inst_num
                     )
                  or (   dbid            != :dbid
                      or instance_number != :inst_num)
              )

call     count       cpu    elapsed       disk      query    current rows
------- ------  -------- ---------- ---------- ---------- ---------- ----------
Parse        1      0.00       0.00          0          0          0          0
Execute      1     29.60      60.68     266984      43776     131172      28144
Fetch        0      0.00       0.00          0          0          0          0
------- ------  -------- ---------- ---------- ---------- ---------- ----------
total        2     29.60      60.68     266984      43776     131172      28144

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: 22

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  DELETE  (cr=43141 r=266947 w=25854 time=60235565 us)
  28144   HASH JOIN ANTI (cr=43057 r=262332 w=25854 time=48830056 us)
  51427    TABLE ACCESS FULL STATS$SQLTEXT (cr=3465 r=3463 w=0 time=865083 us)
 647529    INDEX FAST FULL SCAN STATS$SQL_SUMMARY_PK 
                      (cr=39592 r=39325 w=0 time=10522877 us) (object id 7409)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                      8084        0.12          5.34
  direct path write                             834        0.00          0.00
  direct path write temp                        834        0.00          0.05
  db file parallel read                           8        1.53          5.51
  db file scattered read                       4180        0.07          1.45
  direct path read                             7082        0.00          0.05
  direct path read temp                        7082        0.00          0.44
  rdbms ipc reply                                20        0.00          0.01
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        0.00          0.00
********************************************************************************
复制


示例22-8 TKPROF摘要

此示例显示TKPROF报告的摘要。

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        4      0.04       0.01          0          0          0           0
Execute      5      0.00       0.04          0          0          0           0
Fetch        2      0.00       0.00          0         15          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       11      0.04       0.06          0         15          0           1

Misses in library cache during parse: 4
Misses in library cache during execute: 1
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       6        0.00          0.00
  SQL*Net message from client                     5       77.77        128.88

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

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

Misses in library cache during parse: 1
    5  user  SQL statements in session.
    1  internal SQL statements in session.
    6  SQL statements in session.
********************************************************************************
Trace file: main_ora_27621.trc
Trace file compatibility: 9.00.01
Sort options: default
       1  session in tracefile.
       5  user  SQL statements in trace file.
       1  internal SQL statements in trace file.
       6  SQL statements in trace file.
       6  unique SQL statements in trace file.
      76  lines in trace file.
     128  elapsed seconds in trace file.
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 22.6.2 TKPROF
    • 22.6.2.1目的
    • 22.6.2.2准则
    • 22.6.2.3语法
    • 22.6.2.4选项
    • 22.6.2.5输出
      • 22.6.2.5.1在TKPROF中发出SQL语句的用户的标识
      • 22.6.2.5.2 TKPROF中的表格统计
      • 22.6.2.5.3 TKPROF中的库高速缓存未命中
      • 22.6.2.5.4 TKPROF中的行源操作
      • 22.6.2.5.5 TKPROF中的等待事件信息
    • 22.6.2.6示例