SQL Trace 功能默认时关闭的,可通过 session 变量来控制其关闭和打开。

当 SQL Trace 功能打开后,执行需要诊断的 SQL, 然后通过 show trace 能够查看该 SQL 执行的信息。
这些执行信息以表格方式输出,每列说明如下:

  1. 打开 SQL Trace
  1. 执行目标 SQL
  • Title 列包含整个 SQL 执行经历的各个阶段的信息,以及该 SQL 真实的执行路径。 例如,结果中有经过resolve,transform,optimizer,code generate, 说明该 SQL 重新生成了计划,没有命中 plan cache。
  • KeyValue 列包含一些执行信息,用于问题排查:

  • 记录的 trace_id, 可以作为 sql_audit 中的过滤条件,快速找到该 SQL 执行信息,同时也可以通过该 trace_id 快速查找相关的 observer 日志;

  • 记录的 plan id 可以用于在 v$plan_cache_plan_explain 中查看 plan cache 中缓存的具体执行计划;
  • 1 表示本地计划

  • 2 表示远程计划
  • 3 表示分布式计划

例如,resolve end 对应的 206us 表示的是 resolve begin 到 resolve 耗时。如果某个 SQL 执行很慢,则通过查看 time 列,能够快速定位出具体是哪个阶段执行较慢,然后再进行具体分析。此例中,执行耗时主要在生成计划过程中,因此只需要分析没有命中 plan cache的原因有哪些,可能是计划淘汰后 SQL 第一次执行,或是 Plan Cache 不支持的 SQL。