本文整理记录 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”问题。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐