关于 OceanBase 执行计划缓存(Plan Cache)的命中率诊断与调优,以下说法正确的是?


A. Plan Cache 命中率可以通过 GV$OB_PLAN_CACHE_STAT 视图查询,命中率过低时说明大量 SQL 未使用缓存,可能是由于参数化(使用绑定变量)不足导致。

B. Plan Cache 的命中率只受 ob_plan_cache_percentage 参数影响,调大该值可以线性提高命中率,不会带来副作用。

C. 如果 SQL 中使用字面常量而非绑定变量,优化器会将每个不同常量值视为不同的 SQL,生成多个执行计划,从而提高 Plan Cache 的命中率。

D. Plan Cache 中的执行计划被淘汰后,优化器会重新生成计划,新旧计划一定完全相同,因此淘汰不会影响 SQL 性能。

2 个赞

解析
GV$OB_PLAN_CACHE_STAT 视图提供了 Plan Cache 的详细统计信息,包括缓存命中次数、总查询次数、缓存计划数量等。命中率 = 命中次数 / 总查询次数。如果命中率偏低,常见原因是 SQL 未使用绑定变量,导致大量相似 SQL 被识别为不同 SQL(因为常量值不同),各自生成独立计划并频繁进出 Plan Cache,降低缓存效率和命中率。

  • A 正确 :Plan Cache 命中率可通过视图查询,绑定变量不足是命中率低的常见原因。
  • B 错误 :调大 ob_plan_cache_percentage 可以增加 Plan Cache 可用内存,但并非线性提高命中率 ,且过大会挤占其他内存模块(如 MemStore),可能产生副作用。
  • C 错误 :使用字面常量会导致大量相似 SQL 被视为不同 ,每个 SQL 产生独立计划,Plan Cache 命中率会下降 而非提高。
  • D 错误 :计划被淘汰后重新生成,新计划可能因统计信息变化而与旧计划不同,导致执行性能发生变化(可能变好也可能变差),因此淘汰对性能有影响。
3 个赞

正确答案:A

2 个赞

不错不错

1 个赞