SQL Trace 功能默认是关闭的,可通过 session 变量来控制其打开和关闭。
打开 SQL Trace 功能的语句如下:
当 SQL Trace 功能打开后,执行需要诊断的 SQL,然后通过 能够查看该 SQL 执行的信息。这些执行信息以表格方式输出,每列说明如下:
打开 SQL Trace:
执行目标 SQL:
显示 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。