关于 OceanBase V4 的计划缓存,以下描述正确的是? A. 计划缓存是集群级共享的,任一节点生成的执行计划可被其他节点直接复用 B. 计划缓存属于 KV Cache 的一部分,随 KV Cache 的淘汰策略一同管理 C. 相同 SQL 首次执行时会将执行计划缓存到计划缓存中,再次执行时直接从计划缓存获取 D. 计划缓存大小可由参数控制,且支持运行时动态调整

关于 OceanBase V4 的计划缓存,以下描述正确的是?
A. 计划缓存是集群级共享的,任一节点生成的执行计划可被其他节点直接复用
B. 计划缓存属于 KV Cache 的一部分,随 KV Cache 的淘汰策略一同管理
C. 相同 SQL 首次执行时会将执行计划缓存到计划缓存中,再次执行时直接从计划缓存获取
D. 计划缓存大小可由参数控制,且支持运行时动态调整

答案:C

逐项分析:

  • A 错误 :计划缓存不是集群级共享的。每一个租户在每一台 OBServer 上都有一个独立的计划缓存,用于缓存在该 server 上处理过的 SQL 计划。所以某节点生成的计划并不能被其他节点直接复用。

  • B 错误 :Plan Cache 并不属于 KV Cache。租户内存中除 MemStore 和 KV Cache 以外,还包括 Plan Cache、SQL Area、Worker Area 等独立的内存区域。KV Cache 是用于装载只读 KV 格式数据、可动态伸缩的部分,两者管理方式不同。

  • C 正确 :Plan Cache 用于保存已解析的执行计划,减少 SQL 硬解析;当相同 SQL 请求提交到 OceanBase 时,会直接从缓存中获取该语句的执行计划。默认情况下,某条 SQL 的某一种执行计划只保留第一次执行时生成的那一个;若参数值可能影响计划选择,计划缓存也会按需为不同参数值保留不同计划。

  • D 不严谨 :大小确实由 ob_plan_cache_percentage 控制(默认 5%,即最多可用租户内存上限的 5%),淘汰高/低水位由 ob_plan_cache_evict_high_percentage 、ob_plan_cache_evict_low_percentage 控制,检查间隔由 plan_cache_evict_interval 控制。但“支持运行时动态调整”这一说法在 V4 的考试语境中不是标准表述,且相比 C 的明确正确性,D 属于干扰项。