Oracle 10046 Trace 启动方法详解

在日常的数据库性能诊断中,10046 Trace 被誉为“SQL 执行计划的显微镜”。它不仅能记录每条 SQL 的执行过程,还能捕获等待事件(wait events)和绑定变量(bind variables),是 DBA 和开发人员排查性能瓶颈的利器。

本文将结合 Oracle 运维最佳实践,详细介绍如何开启和关闭 10046 Trace,涵盖传统的 sql_trace 参数和更灵活的 set events 方式,并给出不同版本(11g 以前 vs 11g 及以后)的具体命令。


sql_trace:简单快捷的入门级 Trace

11g 以前的限制

在 Oracle 11g 以前的版本中,sql_trace 只能开启 Level 1 的 Trace(即基础 SQL Trace),无法捕获等待事件和绑定变量等高级信息。

  • 开启 Trace:ALTER SESSION SET sql_trace = true;
  • 关闭 Trace:ALTER SESSION SET sql_trace = false;

11g 及以后版本的增强

从 Oracle 11g 开始,sql_trace 得到了增强,支持通过 events 语法开启更高级的 Trace。

  • 开启基础 Trace:ALTER SESSION SET events ‘sql_trace’;
  • 开启带等待事件的 Trace:ALTER SESSION SET events ‘sql_trace wait=true’;
  • 关闭 Trace:ALTER SESSION SET events ‘sql_trace off’;

提示: sql_trace 的优点是简单快捷,但缺点是功能有限(尤其在 11g 以前)。如果需要更丰富的诊断信息,建议使用 10046 事件。


10046 事件:功能强大的专业级 Trace

10046 事件 是 Oracle 提供的专门用于 SQL 性能诊断的事件,支持以下级别:

级别含义
1基础 SQL Trace(类似 sql_trace
4包含绑定变量(bind variables)
8包含等待事件(wait events)
12同时包含绑定变量和等待事件(最常用

开启 10046 Trace(当前会话)

  • 开启 Level 12 的 Trace(最常用):ALTER SESSION SET EVENTS ‘10046 trace name context forever, level 12’;
  • 关闭 Trace(任何级别通用):ALTER SESSION SET EVENTS ‘10046 trace name context off’;

其他常用级别示例

  • 仅捕获绑定变量(Level 4):ALTER SESSION SET EVENTS ‘10046 trace name context forever, level 4’;
  • 仅捕获等待事件(Level 8):ALTER SESSION SET EVENTS ‘10046 trace name context forever, level 8’;

建议与注意事项

  1. 权限要求: 需要具有 ALTER SESSION 权限。
  2. Trace 文件位置: Trace 文件默认位于 USER_DUMP_DEST 参数指定的目录(可通过 SHOW PARAMETER USER_DUMP_DEST 查询)。
  3. 查找 Trace 文件: 执行以下 SQL 获取当前会话的 Trace 文件名:SELECT value
    FROM v$diag_info
    WHERE name = ‘Default Trace File’;
  4. tkprof 格式化: 使用 tkprof 工具将原始 Trace 文件转换为易读的格式:tkprof trace_file.trc output.txt explain=username/password sys=no waits=yes sort=prsela,exeela,fchela
  5. 对生产环境的影响: 10046 Trace 会产生大量 I/O,可能对性能有一定影响,建议在业务低峰期使用。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部