创建Outline后,如何判断Outline是否生效?

创建Outline后,如何判断Outline是否生效?

A. 执行去掉Hint的SQL,从系统视图GV$OB_PLAN_CACHE_PLAN_STATS中查看OUTLINE_ID

B. 对去掉Hint的SQL执行EXPLAIN,如果显示的执行计划符合预期

C. 执行绑定的SQL,从Plan Cache中判断SQL是否通过绑定的Outline生成了新执行计划

D. 查询DBA_OB_OUTLINES视图,如果状态为VALID则说明生效

1 个赞

答案:A B C
解析:这三个都是验证 Outline 生效的标准方法。

D 错误
DBA_OB_OUTLINES 中 STATUS=VALID 只表示Outline 创建成功、状态合法,不代表已经被 SQL 命中生效。
很多 Outline 状态是 VALID,但从未被任何 SQL 使用。

1 个赞

答案:A B C

答案:A B C

@论坛小助手

创建Outline后,可以通过以下几种方法判断Outline是否生效:
A. 执行去掉Hint的SQL,从系统视图GV$OB_PLAN_CACHE_PLAN_STATS中查看OUTLINE_ID,如果存在对应的OUTLINE_ID,说明Outline已生效。
B. 对去掉Hint的SQL执行EXPLAIN,如果显示的执行计划符合预期,也说明Outline生效。
C. 执行绑定的SQL,从Plan Cache中判断SQL是否通过绑定的Outline生成了新执行计划,如果生成的新计划与绑定的Outline一致,说明Outline生效。
D. 查询DBA_OB_OUTLINES视图,如果状态为VALID则说明Outline生效。

详情请参考:

  1. 计划绑定
  2. 阅读和管理 OceanBase 数据库 SQL 执行计划
  3. CREATE OUTLINE

答案选什么?