Nonblocking DDL

最近更新时间:2024-09-05 21:47:01

我的收藏

功能介绍

当一条 DML 语句执行时,如果持有 metadata lock,就会阻塞对应表的 DDL,导致 DDL 被阻塞后,后续的所有 DML 语句都会被阻塞,这可能会消耗大量的线程资源。为了避免这种情况,TDSQL-C MySQL 版引入了 Nonblocking DDL 机制,保护系统不会被等待 MDL 锁的 DDL 操作卡住。当 DDL 操作被 DML 操作阻塞时,后续的 DML 不会被等待的 MDL 锁进一步阻塞。

支持版本

内核版本 TXSQL 8.0 3.1.15及以上。

适用场景

适用于避免 DML 语句执行时,由于持有 metadata lock,导致阻塞对应表的 DDL 以及后续的所有 DML 语句的场景。

使用说明

参数名
动态
类型
默认
参数值范围
说明
txsql_nonblock_ddl
yes
bool
false
true/false
是否开启 Nonblocking DDL 功能。
txsql_nonblock_ddl_retry_times
yes
ulong
1
0-ulong_max
DDL 操作被 MDL 锁阻塞后的重试次数,默认值为1。
txsql_nonblock_ddl_retry_interval
yes
ulong
2
0-ulong_max
DDL 操作被 MDL 锁阻塞后的重试间隔,默认值为2s。
注意:
部分非常见 DDL 操作可能覆盖不到,这些场景下,如果 DDL 遇到 DML 阻塞,会直接返回 Lock wait timeout。