注意
仅V5.1.9.6020.2531及以后版本的实例,支持该功能。
背景信息
DRDS DDL统一执行框架是为了解决分布式数据库环境中DDL操作的可靠性、可控性和扩展性问题而设计的全新架构。该框架基于DAG(有向无环图)任务编排,将复杂的DDL操作分解为原子任务,通过完善的状态管理和异常处理机制,确保DDL操作的原子性和可靠性。主要特性包括:
原子执行引擎,支持任务依赖定义、幂等重试和自动回滚。
完整的生命周期管理,提供PAUSE/CONTINUE/CANCEL等控制命令。
插件化扩展架构,新增DDL类型只需定义业务逻辑无需修改核心框架。
资源并发控制,避免DDL操作之间的资源冲突。
DDL任务状态
统一执行框架执行DDL任务过程中,DDL任务的状态转换如下,每个状态之间的连线上的标注是状态流转的动作,您也可以执行本文的运维命令管理DDL任务状态,对DDL执行过程进行管理。
状态转换说明:
初始状态为QUEUED(排队中),自动进入RUNNING(运行中)。
说明
运行状态可通过三种管理命令干预:UDAL DDL PAUSE/CANCEL/CONTINUE。
执行回滚操作,会进入回滚运行状态(ROLLBACK_RUNNING)。
所有完成状态(COMPLETED/ROLLBACK_COMPLETED)最终都回到终止状态。
使用说明
启用统一执行框架执行DDL
您可以通过参数enableDdlEngine控制统一执行框架模式开关:
说明
查看和修改参数的操作,请参见管理分组参数。
true(默认):启用统一执行框架执行DDL。
false:采用旧执行模式执行DDL。
支持使用统一执行框架执行的SQL命令
支持的SQL命令会随DRDS实例的版本迭代而逐步适配,具体支持的SQL命令如下:
V5.1.9.6020.2531及以后版本的实例:
V5.1.9.6020.2533及以后版本的实例:
truncate table
V5.1.9.6020.2540及以后版本的实例:
UDAL DDL SHOW [job_id[,job_id...]] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
注意
仅V5.1.9.6020.2531及以后版本的实例,支持执行该命令。
语法说明
查看当前正在运行的DDL任务状态,命令参数说明如下:
参数 描述 job_id DDL任务的唯一标识符 LIMIT {[offset,] row_count | row_count OFFSET offset} 可选,限制返回的记录数量,支持分页。
回显参数说明如下:
参数 描述 Job_id DDL任务的唯一标识符 Zk_event_path ZK DDL任务路径
Trace_id 链路追踪ID Async_task_id 异步DDL模式的任务ID Oper_ddl_job_id 旧的oper_ddl_job表的Job ID Ddl_type DDL类型 Schema_name 数据库模式名 Object_name 对象名称 Origin_sql 原始SQL语句 Exclude_resources 依赖的互斥锁资源列表,多个用逗号分隔 Shared_resources 依赖的共享锁资源列表,多个用逗号分隔 State 作业状态,可能值:
QUEUED:队列中
RUNNING:运行中
PAUSED:已暂停
COMPLETED:已完成
ROLLBACK_RUNNING:回滚中
ROLLBACK_PAUSED:回滚暂停
ROLLBACK_COMPLETED:回滚完成
Result DDL任务执行结果,可能值:
0:初始化
1:成功
2:执行中
3:停止
4:失败
5:取消
6:警告
Remark 备注信息 Create_time 创建时间 Update_time 更新时间
示例
mysql> udal ddl show limit 2,1\G
*************************** 1. row ***************************
Job_id: 33
Zk_event_path: /events/event_0000178351
Trace_id: c206091d-30e4-4d9a-a407-eef304666ea7
Async_task_id:
Oper_ddl_job_id: -1
Ddl_type: Database
Schema_name: test_db
Object_name: NULL
Origin_sql: drop database test_db
Exclude_resources: [test_db]
Shared_resources: []
State: COMPLETED
Result: 1
Remark:
Create_time: 2025-10-15 12:58:06
Update_time: 2025-10-15 12:58:07
1 row in set (0.01 sec)UDAL DDL PAUSE job_id[,job_id...];
注意
仅V5.1.9.6020.2531及以后版本的实例,支持执行该命令。
语法说明
暂停RUNNING或ROLLBACK_RUNNING状态的任务,命令参数说明如下:
参数 描述 job_id DDL任务的唯一标识符。
说明
该参数值可通过
UDAL DDL SHOW命令获取。
示例
mysql> udal ddl pause 33,34;
Query OK, 1 row affected (0.02 sec)UDAL DDL CANCEL job_id[,job_id...];
注意
仅V5.1.9.6020.2531及以后版本的实例,支持执行该命令。
语法说明
取消状态为RUNNING或PAUSED的DDL任务。取消之后,当前DDL任务已发生的变更将会回滚,数据表将恢复到DDL任务执行之前的状态。取消完成后,执行DDL任务的SQL语句会返回
Cancelled DDL job的错误,命令参数说明如下:参数 描述 job_id DDL任务的唯一标识符。
说明
该参数值可通过
UDAL DDL SHOW命令获取。
示例
mysql> udal ddl cancel 33,34;
Query OK, 1 row affected (0.02 sec)UDAL DDL CONTINUE job_id[,job_id...];
语法说明
控制状态为PAUSED或ROLLBACK_PAUSED的DDL任务继续执行,命令参数说明如下:
参数 描述 job_id DDL任务的唯一标识符。
说明
该参数值可通过
UDAL DDL SHOW命令获取。
示例
mysql> udal ddl continue 33,34;
Query OK, 1 row affected (0.02 sec)