OnlineDDL 说明

最近更新时间:2024-05-23 09:28:21

我的收藏
TDSQL MySQL 版(TDStore 引擎)支持大部分的 Online DDL(包括部分只需要修改元数据的 Inplace DDL,在此也统称为 Online DDL),具体能力说明如下。

TDStore 引擎版对 Online DDL 的支持

二级索引操作

OP
语法是否支持
是否支持 Online
不支持 Online 原因
是否只修改元数据
对用户数据的操作
是否支持 DML 并发
Creating or adding a secondary index
Yes
Yes
/
No
需要数据回填
Yes
Dropping an index
Yes
Yes
/
No
需要异步删数据
Yes
Renaming an index
Yes
Yes
/
No
/
Yes
Adding a FULLTEXT index
No
No
引擎暂不支持
/
/
/
Adding a SPATIAL index
No
No
引擎暂不支持
/
/
/
Changing the index type
No
No
引擎只支持普通类型,不支持 Btree/Hash 等
/
/
/

主键操作

涉及主键修改的 DDL 都不支持 Online 方式。
OP
语法是否支持
是否支持 Online
不支持 Online 原因
是否只修改元数据
对用户数据的操作
是否支持 DML 并发
Adding a primary key
Yes
No
需要重新组织数据
No
需要锁表 COPY
No
Dropping a primary key
Yes
No
需要重新组织数据
No
需要锁表 COPY
No
Dropping a primary key and adding another
Yes
No
需要重新组织数据
No
需要锁表 COPY
No

列操作

OP
语法是否支持
是否支持 Online
不支持 Online 原因
是否只修改元数据
对用户数据的操作
是否支持 DML 并发
Adding a column(尾部追加)
Yes
Yes
/
Yes
Yes
Adding a column(非尾部追加)
Yes
Yes
/
No
需要 Online Copy
Yes
Dropping a column
Yes
Yes
/
No
需要 Online Copy
Yes
Renaming a column
Yes
Yes
/
Yes
/
Yes
Reordering columns
Yes
Yes
/
No
需要 Online Copy
Yes
Setting a column default value
Yes
Yes
/
Yes
/
Yes
Changing the column data type
Yes
Yes
/
No
需要 Online Copy
Yes
Extending VARCHAR column size
Yes
Yes
/
Yes
/
Yes
Dropping the column default value
Yes
Yes
/
Yes
/
Yes
Changing the auto-increment value
Yes
No
/
No
需要锁表 COPY
No
Making a column NULL
Yes
Yes
/
No
需要 Online Copy
Yes
Making a column NOT NULL
Yes
Yes
/
No
需要 Online Copy
Yes
Modifying the definition of an ENUM or SET column
Yes
Yes
/
Yes
/
Yes

表操作

OP
语法是否支持
是否支持Online
不支持 Online 原因
是否只修改元数据
对用户数据的操作
是否支持 DML 并发
Changing the ROW_FORMAT
No
No
引擎不支持
/
/
/
Changing the KEY_BLOCK_SIZE
No
No
引擎不支持
/
/
/
Setting persistent table statistics
No
No
引擎不支持
/
/
/
Specifying a character set
Yes
Yes
/
No
需要 Online Copy
Yes
Converting a character set
Yes
Yes
/
No
需要 Online Copy
Yes
Optimizing a table
Yes
No
未算作 DDL
/
/
/
Rebuilding with the FORCE option
Yes
Yes
/
No
需要 Online Copy
Yes
Performing a null rebuild
No
No
引擎不支持
/
/
/
Renaming a table
Yes
Yes
/
Yes
/
Yes

分区操作

OP
语法是否支持
是否支持 Online
不支持 Online 原因
是否只修改元数据
对用户数据的操作
是否支持 DML 并发
PARTITION BY
Yes
Yes
/
No
需要 Online Copy
Yes
ADD PARTITION
Yes
Yes
/
Yes
/
Yes
DROP PARTITION
Yes
Yes
/
Yes
/
Yes
DISCARD PARTITION
No
No
引擎不支持
/
/
/
IMPORT PARTITION
No
No
引擎不支持
/
/
/
TRUNCATE PARTITION
Yes
Yes
/
/
需要异步删数据
Yes
COALESCE PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
REORGANIZE PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
EXCHANGE PARTITION
No
No
引擎不支持
/
/
/
ANALYZE PARTITION
No
No
引擎不支持
/
/
/
CHECK PARTITION
No
No
引擎不支持
/
/
/
OPTIMIZE PARTITION
Yes
No
未算作 DDL
/
/
/
REBUILD PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
REPAIR PARTITION
Yes
No
未算作 DDL
/
/
/
REMOVE PARTITIONING
Yes
Yes
/
No
需要 Online Copy
Yes

表空间操作

TDStore 引擎目前暂不支持表空间相关操作。

Generated Column 操作

TDStore 引擎目前暂不支持 Generated Column 相关操作。

外键操作

TDStore 引擎目前暂不支持外键相关操作。

TDStore 引擎版与社区版 MySQL 支持情况对比

将 TDStore 引擎版的 Inplace 和 Online Copy 以及 社区版 MySQL8.0 的 Instant 和 Inplace 均视为 Online 操作,两者对于常用 DDL 的差异对比说明如下。
OP
TDStore 引擎版
MySQL
Converting a character set
支持 DML 并发
不支持 DML 并发
Changing the column data type
支持 DML 并发
不支持 DML 并发
PARTITION BY
支持 DML 并发
不支持 DML 并发
Extending VARCHAR column size
支持 DML 并发
部分情况下支持,对 VARCHAR(X) 中的 X 有限制
Adding a primary key
不支持 DML 并发
支持 DML 并发
Dropping a primary key and adding another
不支持 DML 并发
支持 DML 并发
说明:
TDStore 引擎版目前尚有少量 DDL 没有支持,因此此处只说明了对比 TDStore 引擎版和社区版 MySQL8.0均支持的部分的差异;
对于 Extending VARCHAR column size 类型,社区版 MySQL8.0会对 VARCHAR(X) 指定的字符长度做出限制,主要涉及存储的 pack length。假设以UTF8MB4作为字符集,某字段所占的字节数为 X*4。
进行 DDL 时,假设当前 VARCHAR 字段 X*4<256,且修改后的字段 Y*4<256;则支持 Inplace;
进行 DDL 时,假设当前 VARCHAR 字段 X*4<256,但修改后的字段 Y*4>=256;则不支持 Inplace;
示例:
CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
ALTER TABLE t1 CHANGE COLUMN b b VARCHAR(20), ALGORITHM=INPLACE, LOCK=NONE; → 成功
ALTER TABLE t1 CHANGE COLUMN b b VARCHAR(64), ALGORITHM=INPLACE, LOCK=NONE; → 失败