Oracle 性能分析系列:tkprof 工具详解 —— 解码 10046 Trace 的利器

什么是 tkprof?

tkprofTrace Kernel PROFiler)是 Oracle 提供的一个工具,用于格式化 10046 Trace 文件
它能将 Oracle 内部记录的二进制 trace 信息转换成人类可读的格式,并汇总 SQL 执行统计、等待事件等数据。

简单说:

10046 trace 提供原始数据,tkprof 帮你“读懂”它。

tkprof 的使用场景

你可以通过 tkprof 分析以下问题:

  • 哪条 SQL 执行次数最多?

  • 哪条 SQL 最耗 CPU 或 I/O?

  • SQL 是否使用绑定变量?

  • 某条语句在 Parse、Execute、Fetch 三个阶段各耗时多少?

  • 是否有频繁的物理读(disk)、一致性读(consistent get)?

基本使用方法

tkprof 输入.trc 输出.log [选项...]

例如:

tkprof orcl_ora_12345_10046.trc tkprof_output.log explain=scott/tiger sys=no waits=yes sort=prsela,exeela,fchela

常用参数说明

参数说明
explain=user/pwd生成执行计划(依赖对象当前状态)
sys=no排除 SYS 用户 SQL(避免干扰)
waits=yes显示等待事件信息
sort=prsela,...按照某项耗时排序输出 SQL

Trace 文件从哪来?

Trace 文件是通过启用 10046 trace 生成的,你可以通过以下 SQL 找到当前会话的 trace 文件路径:

SELECT c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' AS trace_file
  FROM v$process a, v$session b, v$parameter c, v$instance d
 WHERE a.addr = b.paddr
   AND b.audsid = USERENV('sessionid')
   AND c.name = 'user_dump_dest';

tkprof 输出结构解析

以典型输出结构为例:

select * from emp where deptno = :b1;

call     count   cpu  elapsed  disk  query  current  rows
-------  ------  ---- -------- ----- ------ -------- -----
Parse        1   0.00     0.00     0      0        0     0
Execute      5   0.01     0.01     0      0        0     0
Fetch        5   0.02     0.02     3     20        0    10
-------  ------  ---- -------- ----- ------ -------- -----
total       11   0.03     0.03     3     20        0    10

各列说明

项目含义
Parse解析阶段(硬解析或软解析)
Execute执行阶段(可能多次执行)
Fetch取数阶段(从缓冲或磁盘中获取行)
cpuCPU 消耗时间(秒)
elapsed总耗时(秒)
disk物理读次数(从磁盘)
query一致性读次数(consistent gets)
current当前块读(current gets,DML 时常见)
rows返回行数

示例分析:定位慢 SQL

select name from customers where id = :b1;

call     count  cpu  elapsed  disk  query  current  rows
-------  -----  ---- -------- ----  ------ -------- ----
Parse        1  0.00     0.00    0      0        0     0
Execute    100  0.10     0.11    0      0        0     0
Fetch      100  2.70     5.10  150  20000        0   100
total      201  2.80     5.21  150  20000        0   100
  • 每次 Fetch 1 行,但总计发生 20000 次一致性读 + 150 次磁盘读

  • 可初步判断:可能走了全表扫描或索引不合理

结合 tkprof 输出的执行计划(EXPLAIN PLAN)和绑定变量,还可进一步确认路径选择是否合理。

按执行耗时排序 SQL

通过 sort= 参数可以控制输出顺序,例如:

tkprof trace.trc output.log sort=exeela
sort 关键词含义
prselaparse elapsed time
exeelaexecute elapsed time
fchelafetch elapsed time
cpu总 CPU 时间
disk物理读数量

这样可快速识别“最耗时的 SQL”。

注意事项

  • tkprof 的 explain= 生成的执行计划取决于当前环境下的对象状态,可能与实际执行时不同

  • 只有当启用了 10046 trace(level 1/4/8/12)时,trace 文件中才会包含详细的执行信息

  • tkprof 并不会改变数据库内容,它只是格式化工具

小结

优点限制
可读性好,适合初学者上手分析 trace只适用于已经生成的 trace 文件
能输出 SQL 的每个阶段耗时生成的 EXPLAIN PLAN 非实时
支持排序、筛选等输出优化不包含 AWR/ASH 层面的系统视角

推荐组合使用:

  • 10046 trace + tkprof → 查看 SQL 执行耗时、等待事件

  • tkprof + SQL Plan Baseline → 分析执行变化原因

  • tkprof + AWR Top SQL → 深度分析 Top SQL 执行细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值