Online DDL及其操作
传统DDL操作执行期间表无法对外提供读写服务,因此可能导致长时间业务中断。在线DDL支持对正常业务影响较小的情况下进行DDL操作,以减少对业务的影响,提高业务运行的连续性和数据库的可用性。
在线DDL支持通过ONLINE | OFFLINE关键字或GUC参数enable_online_ddl实现在线修改列类型、精度、长度缩减、char类型长度扩长、表级在线移动表空间、在线加非空/检查/主键/唯一约束、在线VACUUM FULL。在线DDL仅在执行前期和后期短暂加排他锁,不会长时间阻塞并发读写业务。请参见ALTER TABLE和VACUUM。
当前支持的Online DDL如表1所示。
分类 |
操作 |
耗时 |
备注 |
---|---|---|---|
列操作 |
支持以下相关操作:
|
|
修改列类型、精度、长度缩减和CHAR类型长度扩长时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。 |
表操作 |
支持以下相关操作:
|
|
表级在线移动表空间时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。 |
表空间操作 |
支持以下相关操作:
|
仅修改元数据时,耗时与数据量无关。 |
- |
约束操作 |
支持以下相关操作:
|
|
添加非空、检查、唯一、主键约束时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。 |
分区操作 |
支持添加分区、删除分区、截断分区、行迁移开关、设置分区索引不可用。 |
仅修改元数据时,耗时与数据量无关。 |
- |
回收存储空间 |
VACUUM FULL |
需要重整数据,耗时与数据量相关。 |
回收存储空间时,需要结合ONLINE关键字或GUC参数enable_online_ddl实现。 |
索引操作 |
支持创建索引CONCURRENTLY、重建索引CONCURRENTLY。 |
需要查询数据,耗时与数据量相关。 |
索引相关操作,请参见7.13.9.28-CREATE INDEX、7.13.18.4-REINDEX。 |