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参数
参数 | 描述 |
---|---|
| 指定输入文件,一个跟踪文件,其中包含SQL跟踪工具生成的统计信息。该文件可以是为单个会话生成的跟踪文件,也可以是通过将来自多个会话的单个跟踪文件串联而生成的文件。 |
| 指定要 |
| 指定是否为在跟踪文件中找到的任何等待事件记录摘要。有效值为 |
| 在输出文件中列出跟踪的SQL语句之前,先按指定的排序选项的降序对其进行排序。如果指定了多个选项,则输出将按照排序选项中指定的值之和以降序排序。如果省略此参数,则
|
| 仅列出输出文件中第一个整数排序的SQL语句。如果省略此参数,则 |
| 如果指定 |
| 创建一个SQL脚本,将跟踪文件统计信息存储在数据库中。 |
| 启用和禁用由用户发出的SQL语句 |
| 指定在 指定的用户必须能够发出 此选项使多个用户可以
如果不存在计划表,则 |
| 确定跟踪文件中每个SQL语句的执行计划,并将这些执行计划写入输出文件。
注意:实例启动后立即生成的跟踪文件包含反映启动过程活动的数据。特别是,当系统全局区域(SGA)中的缓存被填充时,它们反映出不成比例的I / O活动。为了进行调整,请忽略此类跟踪文件。 |
|
|
| 一个整数,用于控制某些 |
22.6.2.5输出
本节说明TKPROF输出。
本节包含以下主题:
- TKPROF :
TKPROF
中发布SQL语句的用户的标识列出了发布每个SQL语句的用户的用户ID。 - TKPROF中的表格统计TKPROF在行和列中列出了SQL跟踪工具返回的SQL语句的统计信息。
- TKPROF中 : 的库高速缓存未命中 TKPROF还列出了每个SQL语句的解析和执行步骤所导致的库高速缓存未命中数。
- TKPROF中的行源操作在TKPROF : 输出中,行源操作显示针对行执行的每个操作处理的行数,以及其他行源信息,例如物理读取和写入。
- TKPROF中的 : 等待事件信息如果存在等待事件信息,则
TKPROF
输出包括有关等待事件的部分。
22.6.2.5.1在TKPROF中发出SQL语句的用户的标识
TKPROF
列出发出每个SQL语句的用户的用户ID。
如果SQL Trace输入文件包含来自多个用户的统计信息,并且该语句是由多个用户发出的,则TKPROF
列出最后一个要解析该语句的用户的ID。所有数据库用户的用户ID出现在列的数据字典中ALL_USERS
。USER_ID
。
22.6.2.5.2 TKPROF中的表格统计
TKPROF在行和列中列出了SQL跟踪工具返回的SQL语句的统计信息。
每行对应于SQL语句处理的三个步骤之一。统计信息由该CALL
列的值标识。请参阅表22-4。
表22-4 CALL列值
通话价值 | 含义 |
---|---|
| 将SQL语句转换为执行计划,包括检查适当的安全授权以及检查表,列和其他引用对象的存在。 |
| Oracle数据库实际执行该语句。对于 |
| 检索查询返回的行。提取仅针对 |
SQL Trace工具输出的其他列是语句的所有解析,执行和提取的组合统计信息。的总和query
与current
被访问缓冲器的总数,也被称为逻辑I / O(LIOS)。请参阅表22-5。
表22-5用于分析,执行和提取的SQL跟踪统计信息。
SQL跟踪统计 | 含义 |
---|---|
| 语句被解析,执行或获取的次数。 |
| 所有对该语句的解析,执行或获取调用的CPU总时间(以秒为单位)。如果 |
| 该语句的所有解析,执行或提取调用的总经过时间(以秒为单位)。如果 |
| 从磁盘上的数据文件实际读取的,用于所有解析,执行或获取调用的数据块总数。 |
| 在所有解析,执行或提取调用中,以一致模式检索的缓冲区总数。通常,以一致的方式检索缓冲区以进行查询。 |
| 当前模式下检索到的缓冲区总数。缓冲区在电流模式中检索的语句,例如 |
有关已处理行的统计信息显示在该ROWS
列中。该列显示了SQL语句处理的行数。此总数不包括由SQL语句的子查询处理的行。对于SELECT
语句,将在获取步骤中显示返回的行数。对于UPDATE
,DELETE
和INSERT
语句,将为执行步骤显示已处理的行数。
注意:
当关闭游标时,将显示行源计数。在SQL * Plus中,只有一个用户游标,因此执行的每个语句都会导致前一个游标被关闭;因此,将显示行源计数。PL / SQL具有自己的游标处理,并且在关闭父游标时不会关闭子游标。退出或重新连接将显示计数。
22.6.2.5.3 TKPROF中的库高速缓存未命中
TKPROF还列出了每个SQL语句的解析和执行步骤所导致的库高速缓存未命中数。
这些统计信息显示在表格统计信息之后的不同行上。如果该语句未导致任何库高速缓存未命中,TKPROF
则不列出该统计信息。在“ 示例 ”中,该语句导致解析步骤一个库高速缓存未命中,而执行步骤没有未命中。
22.6.2.5.4 TKPROF中的行源操作
在TKPROF输出中,行源操作显示对行执行的每个操作处理的行数,以及其他行源信息,例如物理读取和写入。
表22-6行源操作
行源操作 | 含义 |
---|---|
| 行源执行的读取一致。 |
| 行源执行的物理读取 |
| 行源执行的物理写入 |
| 时间(以微秒为单位) |
在下面的示例TKPROF
输出,请注意cr
,r
,w
,和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脚本STOREA
。SQL
在数据库中存储所有跟踪的SQL语句的统计信息。 SYS
带有NO
cause 值的参数TKPROF
将省略输出文件中的递归SQL语句。这样,您可以忽略内部Oracle数据库语句,例如临时表操作。- 该
SORT
值使TKPROF
SQL语句按照执行所花费的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.
复制