TDSQL Boundless Online DDL 说明

TDSQL Boundless 对 Online DDL 的支持。TDSQL Boundless 已支持大部分的 Online DDL,包括部分只需要修改元数据的 Inplace DDL。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、二级索引

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 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 引擎只支持普通索引,不支持 B-tree/Hash 等 / / /

二、主键

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 DML
Adding a primary key Yes Yes / No 需要 Online Copy Yes
Dropping a primary key Yes No 需要重新组织数据 No 需要锁表 COPY No
Dropping a primary key and adding another Yes Yes / No 需要锁表 COPY Yes

三、列

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 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(column is not part of primary key) Yes Yes / 视情况而定,详见 尾部说明 视情况而定,详见 尾部说明 Yes
Extending VARCHAR column size(column is part of primary key) Yes Yes / No 需要 Online Copy Yes
Dropping the column default value Yes Yes / Yes / Yes
Changing the auto-increment value Yes Yes / Yes / Yes
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

四、表

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 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 / 使用该语法时直接返回成功,实际未做任何操作,因为引擎会执行自动 compaction,该语法的行为并不适用。 / / /
Rebuilding with the FORCE option Yes Yes / No 需要 Online Copy Yes
Performing a null rebuild No No 引擎不支持 / / /
Renaming a table Yes Yes / Yes / Yes

五、分区

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 DML
PARTITION BY Yes Yes / No 需要 Online Copy Yes
ADD PARTITION(添加 Range/List 分区) Yes Yes / Yes / Yes
ADD PARTITION(添加 Hash/Key 分区) Yes Yes / NO 需要 Online Copy 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 / 使用该语法时直接返回成功,实际未做任何操作,因为 引擎会执行自动 compaction,该语法的行为并不适用。 / / /
REBUILD PARTITION Yes Yes / No 需要 Online Copy Yes
REPAIR PARTITION Yes No 未算作 DDL / / /
REMOVE PARTITIONING Yes Yes / No 需要 Online Copy Yes

注意:说明:

注意:21.6.3.0版本及以上支持全局索引。DROP PARTITION、TRUNCATE PARTITION 处理全局索引逻辑详见 全局索引。

六、表空间

目前暂不支持表空间(Tablespace)相关操作。

七、生成列

生成列即虚拟列(Generated Column),从21.6.4.0版本及以上开始支持 VIRTUAL 与 STORED 生成列的 Online DDL 操作:

·VIRTUAL 生成列支持 Instant ADD/DROP:无需重建数据,仅涉及元数据修改。

·ADD/DROP STORED 生成列、修改生成列表达式、加宽基础列类型等需重写数据的操作,基于 Online Copy DDL 在线执行,支持并发 DML。

·仅修改生成列属性(如 COMMENT)、不改动表达式与类型时,MODIFY 支持 INPLACE,只涉及元数据修改。

不支持的操作:VIRTUAL 与 STORED 互转;RENAME/DROP 被生成列引用的基础列。

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 DML
Adding VIRTUAL generated column Yes Yes / Yes / Yes
Adding STORED generated column Yes Yes / No 需要 Online Copy Yes
Dropping VIRTUAL generated column Yes Yes / Yes / Yes
Dropping STORED generated column Yes Yes / No 需要 Online Copy Yes
Modifying generated column expression(VIRTUAL/STORED) Yes Yes / No 需要 Online Copy Yes
Modifying generated column(仅改属性,表达式/类型不变) Yes Yes / Yes / Yes
Renaming generated column(表达式不变) Yes Yes / Yes / Yes
Renaming generated column(改名 + 改表达式) No No 引擎不支持 / / /
Changing storage type(VIRTUAL ↔ STORED) No No 引擎不支持 / / /
Renaming base column referenced by generated column No No 引擎不支持 / / /
Dropping base column referenced by generated column No No 引擎不支持 / / /
Widening base column type(INT→BIGINT、VARCHAR 加长、改字符集) Yes Yes / No 需要 Online Copy Yes

八、外键

目前暂不支持外键(Foreign keys)相关操作。

九、TTL

操作项 语法支持 在线更改 不支持在线更改原因 仅修改元数据 对用户数据的操作 支持并发 DML
Adding TTL Yes Yes / Yes / Yes
Modifying TTL Yes Yes / Yes / Yes
Removing TTL (REMOVE TTL) Yes Yes / Yes / Yes
TTL_ENABLE Yes Yes / Yes / Yes
TTL_JOB_INTERVAL Yes Yes / Yes / Yes
TTL_ARCHIVE_TABLE Yes Yes / Yes / Yes
TTL_ARCHIVE_ON_CONFLICT Yes Yes / Yes / Yes

十、与社区版 MySQL 支持情况对比

将 TDSQL Boundless 的 Inplace 和 Online Copy 以及 社区版 MySQL 8.0 的 Instant 和 Inplace 均视为 Online 操作,两者对于常用 DDL 的差异对比说明如下。

操作项 TDSQL Boundless 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 并发

注意:说明:

进行 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; — 失败

十一、无主键表 Online DDL 支持

从21.6.3.0版本起,支持对无主键表执行 Online Copy DDL 操作。此前无主键表只能走 Offline DDL,无法并发读写。当前实现通过表内部的隐藏主键完成增量数据同步,使得无主键表可以享受与有主键表相同的 Online Copy DDL 能力。目前支持大部分标记为"需要 Online Copy"的 DDL 操作,包括但不限于:

·修改列类型(如 int 列转换为 bigint 列)

·添加/删除列(非尾部追加的添加列)

·列重排序

·修改字符集

·添加主键(ADD PRIMARY KEY)

注意:无主键分区表执行 Online DDL 时不可修改分区规则、也不可与非分区表互相转换。

限制项 说明
分区表的分区规则不可变 无主键分区表执行 Online Copy DDL 时,不能修改分区规则(不能修改分区数目、分区算法等)
分区表和非分区表之间不可互相转换 无主键分区表和无主键非分区表之间暂不支持通过 Online DDL 互相转换

十二、注意事项

当前 TDSQL Boundless 支持抢占式 DDL 模式和无阻塞 DDL 模式,通过参数 tdsql_ddl_block_mode 来控制,详细请参见 tdsql_ddl_block_mode。

赞 (0)
上一篇 4天前
下一篇 4天前