支持异步执行的DDL语句
更新时间 2025-07-10 15:15:11
最近更新时间: 2025-07-10 15:15:11
本文为您介绍dbproxy支持异步执行的DDL语句。
异步执行DDL说明
正常客户端在执行DDL时,是同步等待服务端返回。用户DDL请求转为DdlTask(UdalDdlEventVO)提交到zk,然后等待zk任务的执行状态改变(执行完成),再将zk中的任务执行结果返回给客户端。这是一种同步等待的模式,如果DDL执行久,会话一直卡住,特别是admin执行时,会一直占用线程数量。
dbproxy支持客户端在DDL SQLl前加上HINT语法,提示dbproxy以异步方式执行DDL,dbproxy在接收到异步DDL请求时,用户DDL请求转为DdlTask(UdalDdlEventVO)提交到zk后,会立刻返回客户端成功,不等待dbproxy侧DDL执行完成返回结果。
HINT语法:
/* !HINT({"asyncDdlMode":true, "taskId":"{合法的uuid字符串}"})*/
注意
taskId
要求是个合法的UUID,dbproxy会有校验。注意 /* !HINT
中间有个空格。
示例如下:
/* !HINT({"asyncDdlMode":true, "taskId":"9aa71832-a945-11ef-80aa-080027252449"})*/CREATE TABLE IF NOT EXISTS `test_global` (
`k` int(11) NOT NULL default 0 comment 'k', `v` int(11) NOT NULL DEFAULT '0' comment 'v', PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='test'/*sharding @@table name='test_global' set type='global' and dn='test_db_1,test_db_2';*/;
支持异步执行的DDL语句
支持异步执行的DDL语句如下: