Oracle 10046 Trace 设置方法详解(含会话级与系统级)
Oracle 提供的事件可以用于捕捉 SQL 执行过程中的详细信息,包括:绑定变量(binds)等待事件(waits)执行计划(execution plan)执行次数、耗时等详细指标与普通的 AWR 报告不同,10046 Trace 提供的是极为底层、逐语句级别的诊断信息,常与tkprof工具配合使用。会话级设置适合临时分析某个用户的 SQL。系统级设置适用于分析全局或新连接的行为。配合tkpro
本文整理记录 Oracle 数据库中使用 10046 trace 进行 SQL 性能分析的方法,包含会话级(Session-Level)与系统级(System-Level)设置方式,适用于排查慢 SQL、等待事件、执行计划偏差等性能问题。
什么是 10046 Trace?
Oracle 提供的事件 10046 trace 可以用于捕捉 SQL 执行过程中的详细信息,包括:
-
绑定变量(binds)
-
等待事件(waits)
-
执行计划(execution plan)
-
执行次数、耗时等详细指标
与普通的 AWR 报告不同,10046 Trace 提供的是极为底层、逐语句级别的诊断信息,常与 tkprof 工具配合使用。
会话级(Session-Level)设置方法
下面是通过当前会话启用 10046 trace 的典型步骤:
1. 设置会话属性
-- 设置日期格式方便查看
ALTER SESSION SET nls_date_format = 'yyyy/mm/dd hh24:mi:ss';
-- 开启计时统计
ALTER SESSION SET timed_statistics = TRUE;
-- 设置 trace 文件名标识符
ALTER SESSION SET tracefile_identifier = '10046';
-- 启用 10046 trace(level 12:包含绑定变量和等待事件)
ALTER SESSION SET events '10046 trace name context forever, level 12';
-- 记录开始时间
SELECT SYSDATE FROM dual;
2. 执行目标 SQL
-- 执行需要分析的 SQL 脚本
-- 例如:@SqlBullet.sql
3. 结束记录
-- 记录结束时间
SELECT SYSDATE FROM dual;
-- 关闭 trace
ALTER SESSION SET events '10046 trace name context off';
4. 使用 tkprof 格式化 trace 文件
tkprof xxx.trc /tmp/xxx.log
其中 xxx.trc 为生成的 trace 文件路径,/tmp/xxx.log 为分析结果输出路径。
系统级(System-Level)设置方法
在某些情况下,例如需要追踪某个新连接执行的 INSERT 操作,可通过系统级方式设置:
1. 开启系统级 trace
ALTER SYSTEM SET events '10046 trace name context forever, level 12';
2. 用新连接执行目标 SQL
从客户端重新连接数据库,并执行需要分析的 SQL 语句。
3. 停止 trace
ALTER SYSTEM SET events '10046 trace name context off';
查找 trace 文件路径
方式一:通过 v$diag_info
SELECT value FROM v$diag_info WHERE name = 'Diag 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';
不同 Level 的含义参考
| Level | 内容说明 |
|---|---|
| 1 | 普通 SQL 跟踪 |
| 4 | 包括绑定变量(binds) |
| 8 | 包括等待事件(waits) |
| 12 | 包括绑定变量 + 等待事件 ✅推荐使用 |
补充说明
如果你仅需分析等待事件,而不关注绑定变量,可选择:
ALTER SESSION SET events '10046 trace name context forever, level 8';
请根据实际需求选择对应的 Level。
总结
-
会话级设置适合临时分析某个用户的 SQL。
-
系统级设置适用于分析全局或新连接的行为。
-
配合
tkprof可清晰分析性能瓶颈来源。
10046 Trace 是 Oracle 调优工具链中非常重要的一环,尤其适用于 AWR 难以捕捉的“间歇性慢 SQL”问题。
更多推荐


所有评论(0)