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

  • 打开 SQL Trace 功能的语句如下:

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

  1. 打开 SQL Trace:

  2. 执行目标 SQL:

  3. 显示 Trace:

    • KeyValue 列包含一些执行信息,可以用于排查问题:

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

    • 可以用于在 v$plan_cache_plan_explain 中查看 plan cache 中缓存的具体执行计划。

    • Time 列显示上一个阶段点到这次阶段点执行耗时。

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