支持異步執行的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語句如下: