功能介绍
当一条 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。
本页内容是否解决了您的问题?