更新时间:2024-11-12 GMT+08:00
分享

Online DDL及其操作

传统DDL操作执行期间表无法对外提供读写服务,因此可能导致长时间业务中断。在线DDL支持对正常业务影响较小的情况下进行DDL操作,以减少对业务的影响,提高业务运行的连续性和数据库的可用性。

在线DDL支持通过ONLINE | OFFLINE关键字或GUC参数enable_online_ddl实现在线修改列类型、精度、长度缩减、char类型长度扩长、表级在线移动表空间、在线加非空/检查/主键/唯一约束、在线VACUUM FULL。在线DDL仅在执行前期和后期短暂加排他锁,不会长时间阻塞并发读写业务。请参见ALTER TABLEVACUUM

当前支持的Online DDL如表1所示。

表1 支持的Online DDL介绍

分类

操作

耗时

备注

列操作

支持以下相关操作:
  • 添加列:设置列默认值为表达式。
  • 删除列。
  • 重命名列。
  • 设置和删除列的默认值。
  • 修改列长度。
  • 修改列精度。
  • 修改列类型。
  • 修改ENUM/SET列定义。
  • 当需要重整数据时,耗时与数据量相关。
  • 当仅修改元数据时,耗时与数据量无关。

修改列类型、精度、长度缩减和CHAR类型长度扩长时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。

表操作

支持以下相关操作:
  • 表级在线移动表空间。
  • 重命名表。
  • 指定字符集。
  • 删除表。
  • 当需要移动数据时,耗时与数据量相关。
  • 当仅修改元数据时,耗时与数据量无关。

表级在线移动表空间时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。

表空间操作

支持以下相关操作:
  • 重命名表空间。
  • 修改表空间所有者。
  • 删除表空间。

仅修改元数据时,耗时与数据量无关。

-

约束操作

支持以下相关操作:
  • 添加非空、检查、唯一、主键约束。
  • 设置列约束为NULL。
  • 当需要查询数据时,耗时与数据量相关。
  • 当仅修改元数据时,耗时与数据量无关。

添加非空、检查、唯一、主键约束时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。

分区操作

支持添加分区、删除分区、截断分区、行迁移开关、设置分区索引不可用。

仅修改元数据时,耗时与数据量无关。

-

回收存储空间

VACUUM FULL

需要重整数据,耗时与数据量相关。

回收存储空间时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。

索引操作

支持创建索引CONCURRENTLY、重建索引CONCURRENTLY。

需要查询数据,耗时与数据量相关。

索引相关操作,请参见7.13.9.28-CREATE INDEX7.13.18.4-REINDEX

相关文档