OceanBase 4.x的MySQL租户在执行ALTER TABLE添加列和CREATE INDEX时,对生产环境业务表的影响程度如何?是否会导致锁表

OceanBase 4.x的MySQL租户在执行ALTER TABLE添加列和CREATE INDEX时,对生产环境业务表的影响程度如何?是否会导致锁表

看下你的这个操作是online ddl还是offline ddl,如果是online ddl 会锁表,会对业务产生影响

1、 在 OceanBase 4.x 的 MySQL 模式下,创建索引默认支持在线 DDL,不会阻塞 DML 操作,对生产环境影响可控。 OceanBase 实现了 并行创建索引(parallel index build) 技术,创建索引过程中表仍然可读可写。
2、 在 OceanBase 4.x 的 MySQL 模式下,添加列(ALTER TABLE ... ADD COLUMN)是支持在线 DDL 的,不会长时间锁表,对业务影响较小 。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000252800

1 个赞

关于创建索引和添加列是否会锁表的详细解答:

  1. OceanBase 的锁机制概述
    OceanBase 数据库目前不支持表锁,只支持行锁,并且仅存在互斥行锁(参考文档片段 5)。这意味着传统意义上的表级锁定在 OceanBase 中并不存在。
    在 OceanBase 数据库中,DDL 操作通过在线 DDL 变更实现,尽量减少对业务的影响。
  2. 创建普通索引
    是否锁表:OceanBase 支持在线 DDL,创建普通索引时不会锁表。与 MySQL 类似,OceanBase 在此过程中会短暂持有元数据锁(MDL),以确保结构一致性。
    延迟生效:需要注意的是,OceanBase 创建普通索引是异步执行的,通常 T+1 生效(参考文档片段 7)。在此期间,虽然不会锁表,但索引尚未完全可用。
  3. 创建唯一索引
    是否锁表:创建唯一索引时也不会锁表,但与普通索引类似,唯一索引的创建是异步执行的,通常 T+2 生效(参考文档片段 7)。在此期间,虽然不会锁表,但索引尚未完全可用。
    写操作限制:由于唯一性约束的存在,在创建唯一索引的过程中,可能会对写操作(如插入或更新)产生短暂限制,以确保唯一性检查的一致性。
  4. 添加列
    是否锁表:OceanBase 支持在线 DDL,添加列的操作不会锁表。类似于 MySQL 的 Instant DDL 特性,OceanBase 的添加列操作可以几乎瞬时完成,尤其是当新增列允许为 NULL 时。
    注意事项:如果新增列设置了默认值,并且该默认值需要回填到现有数据中,则可能会涉及一定的后台扫描和更新操作,但这仍然不会导致表级锁定。
  5. 总结对比
    操作类型 是否锁表(OceanBase 4.x) 备注
    创建普通索引 否 异步执行,T+1 生效;短暂持有 MDL。
    创建唯一索引 否 异步执行,T+2 生效;可能对写操作有短暂限制。
    添加列 否 如果需要回填默认值,可能会涉及后台扫描,但不会锁表。