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)?

基本使用方法

bash 复制代码
tkprof 输入.trc 输出.log [选项...]

例如:

bash 复制代码
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 文件路径:

sql 复制代码
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 输出结构解析

以典型输出结构为例:

sql 复制代码
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 取数阶段(从缓冲或磁盘中获取行)
cpu CPU 消耗时间(秒)
elapsed 总耗时(秒)
disk 物理读次数(从磁盘)
query 一致性读次数(consistent gets)
current 当前块读(current gets,DML 时常见)
rows 返回行数

示例分析:定位慢 SQL

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= 参数可以控制输出顺序,例如:

bash 复制代码
tkprof trace.trc output.log sort=exeela
sort 关键词 含义
prsela parse elapsed time
exeela execute elapsed time
fchela fetch 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 执行细节

相关推荐
洁辉1 小时前
Oracle 数据库中将某个字段的值根据逗号(,)分隔符拆分成多行显示
数据库·oracle
qife1221 小时前
CVE-2026-21962漏洞利用工具:Oracle WebLogic代理插件未授权RCE检测与利用
数据库·网络安全·oracle·渗透测试·weblogic·cve-2026-21962
weixin_390602991 小时前
产品实测:金仓与Oracle兼容性验证
数据库·oracle
定偶2 小时前
mysql
c语言·数据库·mysql
Nandeska3 小时前
10、MySQL8.0新增特性
数据库·mysql
未来之窗软件服务3 小时前
计算机等级考试—KTV 管理系统数据流图大题—东方仙盟练气期
数据库·计算机软考·仙盟创梦ide·东方仙盟
云草桑3 小时前
.net AI开发04 第八章 引入RAG知识库与文档管理核心能力及事件总线
数据库·人工智能·microsoft·c#·asp.net·.net·rag
diediedei3 小时前
机器学习模型部署:将模型转化为Web API
jvm·数据库·python