更新时间:2024-12-23 GMT+08:00

DDL快速超时

对一些特定的DDL操作,实现了单独设置其MDL等锁时间的功能,基于此功能可以实现让这类操作在等待MDL锁时快速超时,避免阻塞后续DML操作。

约束与限制

  • 内核版本为2.0.45.230900及以上版本支持使用该功能。
  • 目前支持的DDL操作包括:ALTER TABLE、CREATE INDEX、DROP INDEX。

开启DDL快速超时

表1 参数说明

参数名称

级别

描述

rds_ddl_lock_wait_timeout

Global,Session

控制当前会话或者全局的DDL超时时间。

  • 时间单位为秒,范围为1秒到31536000,默认值为31536000,相当于不开启。
  • 对于DDL的等锁超时,其真实超时时间是lock_wait_timeout和rds_ddl_lock_wait_timeout的最小值。
  • 对于DDL过程中InnoDB层的加表锁超时(行锁不在该考虑范围),其真实超时时间是innodb_lock_wait_timeout和rds_ddl_lock_wait_timeout)的最小值。

使用示例

  1. 首先开启一个客户端,执行加锁操作,示例如下。
    图1 加锁操作
  2. 通过如下命令,查看DDL快速超时功能的状态。

    show variables like "%rds_ddl_lock_wait_timeout%";

    图2 查看状态

    如上图所示,查询到“rds_ddl_lock_wait_timeout”的值是“31536000”,此时是默认值,相当于不开启DDL快速超时功能。如果此时等锁,就会卡在这里。

    如果需要开启DDL快速超时功能,可以将这个值设置为预期值,操作请参考3

  3. 设置参数。

    执行如下命令,设置“rds_ddl_lock_wait_timeout”参数值。

    set rds_ddl_lock_wait_timeout=1;

    图3 设置参数
  4. 然后执行如下创建索引命令,发现DDL操作会快速超时失败,符合预期。
    alter table lzk.t_lzk drop index indexa;
    图4 执行创建索引命令