更新时间:2026-01-13 GMT+08:00
分享

分区级MDL锁

操作场景

在MySQL社区版中,分区表的数据访问操作(DML)和分区维护操作(DDL)会互相阻塞,这意味着分区维护只能在业务低峰期进行。然而,创建和删除分区的操作相对频繁,这在很大程度上限制了分区表的使用。

TaurusDB实现了分区级别的MDL锁,将分区表的锁粒度从表级降低到分区级。不同分区上的DML操作和特定的DDL操作(如增加和删除分区)在MDL锁上不会相互阻塞,从而显著提升了分区间操作的并发性。

使用限制

  • 当前版本支持分区级MDL锁功能,包括DROP PARTITION操作、RANGE和LIST分区方式的ADD PARTITION操作。
  • DROP PARTITION操作和ADD PARTITION操作仅支持inplace算法,不支持copy算法。
  • 由于隔离级别可以设置为会话级别,如果transaction_isolation设置为REPEATABLE-READ或更高的隔离级别,在并发执行DDL过程中,可能会出现如下报错:
    ERROR HY000: Table definition has changed, please retry transaction。

    这是正常现象,因为事务访问到了DDL创建的新分区。可以通过重新执行事务来解决这个问题。

前提条件

开启分区级MDL锁

您可以通过“rds_partition_level_mdl_enabled”参数来开启分区级MDL锁功能。

表1 参数说明

参数名称

级别

描述

rds_partition_level_mdl_enabled

Global

分区级MDL锁特性开关,默认值为OFF。

ON:开启分区级MDL锁特性。

OFF:关闭分区级MDL锁特性。

说明:

修改该参数需要重启。

使用示例

以下是使用示例:

相关文档