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
;
→ 失败