关于 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 属于干扰项。