更新时间:2021-09-15 19:48:21
新DDL执行引擎引入任务管理,外部行为与之前版本相比有所变化。本文将介绍相关的常见场景与限制。
CHECK TABLE
检查确认逻辑表的一致性。SHOW DDL
查看PENDING状态的DDL任务失败的原因(即REMARK
字段中记录的信息)。建议您在排除导致DDL执行错误的因素后,再尝试执行DDL任务管理语句进行恢复、回滚或删除操作,否则DDL执行可能仍会失败。SHOW TABLES
等操作无法显示,DML等操作可能会收到Unknown table
或doesn't exist
之类的报错),直到DDL任务通过恢复或回滚等方式使目标表达到一致性的状态后,该表才可以被正常访问。IF NOT EXISTS
或者为DROP TABLE指定IF EXISTS
时,一些执行过程中的错误不会导致 DDL失败,但会记录在warning
警告中,请注意DDL执行后是否返回warning
数量的消息(例如1 warning
),并用SHOW WARNINGS
语句检查警告,避免遗漏重要的信息。PURE_ASYNC_DDL_MODE
异步模式,执行后立即返回,继续通过SHOW DDL
查看DDL任务状态CHECK TABLE
检查确认逻辑表的一致性。CREATE TABLE
和RENAME TABLE
两种DDL回滚操作。RECOVER DDL
)和回滚(ROLLBACK DDL
)的组合重复操作(如先回滚失败任务,回滚失败后再对任务进行恢复操作。此类组合操作有可能造成逻辑表的不一致状态,如果遇到此类复杂场景,请联系客服或提交工单解决问题。REMOVE DDL
要在非常确定安全性的前提下谨慎使用,若不确定则不应执行REMOVE DDL
,误用可能造成DDL任务的中间状态暴露,出现逻辑表不一致的情况。如果因为误用REMOVE DDL
产生问题或不确定的状态,请联系客服或提交工单解决问题。mysql> create table test_mdb_mtb (c1 int not null auto_increment primary key, c2 varchar(10), c3 date) dbpartition by hash(c1) tbpartition by hash(c1) tbpartitions 129;
ERROR 4647 (HY000): [f5bd90594800000][30.25.86.55:8527][JICHEN_LOCAL_APP]ERR-CODE: [TDDL-4647][ERR_TABLE_PARTITIONS_EXCEED_LIMIT] The number of table partitions '129' exceeds the upper limit '128'. Please specify less table partitions or adjust the value of the parameter MAX_TABLE_PARTITIONS_PER_DB.
mysql> /*+TDDL:cmd_extra(MAX_TABLE_PARTITIONS_PER_DB=400)*/create table test_mdb_mtb (c1 int not null auto_increment primary key, c2 varchar(10), c3 date) dbpartition by hash(c1) tbpartition by hash(c1) tbpartitions 129;
Query OK, 0 rows affected (2.64 sec)
REMOVE DDL
谨慎清理可删除的遗留任务,该数量限制无法通过参数调整上限。