关于 OceanBase 的在线 DDL(Online DDL)实现机制,以下说法正确的是?

关于 OceanBase 的在线 DDL(Online DDL)实现机制,以下说法正确的是?

A. OceanBase 在执行加列(ADD COLUMN)操作时,需要重建全表数据,期间表处于只读状态,无法执行写入操作。

B. 对于添加 DEFAULT 值非常量的列,OceanBase 采用“隐藏列+数据回填”的两阶段方案,回填期间允许读写,回填完成后隐藏列转为可见列。

C. 在线 DDL 过程中,原表的所有索引会暂时失效,直到 DDL 完成后再重建索引,因此 DDL 期间查询性能会明显下降。

D. 删除列(DROP COLUMN)操作瞬间完成,只需修改表的 Schema 元数据,无需修改实际数据文件。

1 个赞

解析
OceanBase 对于复杂 DDL(如添加带非常量默认值的列、修改列类型等)采用 隐藏列 + 数据回填(Online Data Reorganization) 方案:新建隐藏列,在后台逐步回填数据(允许并发读写),回填完成后通过 Schema 切换将隐藏列变为可见列,整个过程对业务几乎无影响。

  • A 错误 :加列操作分为两种情况:若添加的是常量默认值(或 NULL) 的列,仅修改元数据,无需重建数据 ;若为非常量默认值(如 CURRENT_TIMESTAMP ),则需回填数据,但表处于读写状态 ,而非只读。
  • B 正确 :非常量默认值的加列,确实采用“隐藏列 + 回填”方式,回填期间支持正常读写,最终平滑切换。
  • C 错误 :在线 DDL 不会使索引失效 ,索引维护与数据回填同步进行,支持在线并发查询(可能短暂性能抖动,但不会完全失效)。
  • D 错误 :删除列并非瞬间完成 。OceanBase 先标记列为“删除”状态(元数据变更),后续合并(Major Compaction)时会物理上过滤掉该列的数据 ,释放空间。这与逻辑删除不同,需要后台清理。因此 D 描述的“瞬间完成且不修改数据文件”不准确。
1 个赞

答案是b