于 OceanBase 的 SQL Plan Management 中计划演进(Plan Evolution),以下说法正确的是?

关于 OceanBase 的 SQL Plan Management 中计划演进(Plan Evolution),以下说法正确的是?

A. 计划演进是指系统自动捕获新的执行计划,并将其加入 SPM 基线中替换原有的已接受计划,无需人工干预。

B. 当开启自动计划演进后,系统会将被验证性能不劣于原有计划的未接受计划 标记为 ACCEPTED ,并在后续查询中允许优化器使用该计划。

C. 计划演进只针对绑定 Hint 生成的 Outline 计划,对于系统自动生成的计划不会触发演进流程。

D. 演进过程中,系统会将新计划与基线计划同时运行一段时间,通过对比实际执行统计信息来判定性能优劣,若新计划更优则自动替换,若更劣则保持不变。

1 个赞

解析
OceanBase SPM 的计划演进机制允许未接受的计划 (如优化器新生成的计划)在验证性能不劣于已接受的基线计划后,自动或手动将其标记为已接受(ACCEPTED),从而让优化器后续可以选用。这一过程需要满足验证条件(如执行时间不超过基线计划的 N 倍,默认 1.5 倍)。

  • A 错误 :系统自动捕获新计划后,默认仅为 UNACCEPTED 状态,不会自动替换已有基线,需要经过演进验证 通过后才可能被接受。另外“无需人工干预”不准确,演进可自动或手动。
  • B 正确 :这是自动计划演进的核心:系统后台验证 UNACCEPTED 计划,如果性能不劣于基线(通过多次执行对比),则将其状态改为 ACCEPTED,优化器后续可选用。
  • C 错误 :计划演进适用于所有受 SPM 管理的计划,包括非 Outline 生成的计划 (如普通 SQL 自动生成的计划)。Outline 只是一种计划绑定方式。
  • D 错误 :演进验证不会同时运行新计划和基线计划 进行实时对比,而是通过已有执行统计信息(如计划缓存中的历史执行数据)或使用新计划实际执行若干次(如设置 evolution_xxx 参数)来收集性能数据,不会造成两个计划同时并发执行。D 的描述更像 A/B Test,不符合 OceanBase 的实现。

正确答案:B

正确答案BD

  • 选项 B 正确:开启自动计划演进后,系统会验证新计划的性能,若性能不劣于原基线计划,会将其标记为ACCEPTED,后续优化器可使用该计划。
  • 选项 D 正确:演进过程中,系统会将新计划与基线计划进行对比验证(灰度流量或并行执行),通过实际执行统计信息判定性能优劣,若新计划更优则自动替换,若更劣则保持原计划不变。

错误答案

  • 选项 A 错误:计划演进不是 “自动替换”,而是先验证性能,只有新计划性能不劣于原计划时,才会被标记为ACCEPTED,并非直接替换,也并非完全无需人工干预(演进结果可人工确认)。
  • 选项 C 错误:计划演进针对所有 SQL 的执行计划,包括系统自动生成的计划,并非只针对绑定 Hint 生成的 Outline 计划。