支持异步ddl模式
正常客户端在执行ddl时,是同步等待服务端返回。用户ddl请求转为DdlTask(UdalDdlEventVO)提交到zk,然后等待zk任务的执行状态改变(执行完成),再将zk中的任务执行结果返回给客户端。这是一种同步等待的模式,如果ddl执行久,会话一直卡住,特别是admin执行时,会一直占用线程数量。 支持客户端在ddl sql前加上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';*/;