RDS for MySQL InnoDB 表级锁等待
在 RDS MySQL 实例日常使用中,有些情况下会发现出现 InnoDB 表级锁等待的情况,下面列出常见的2个原因。
1. 显式 lock table
执行了 lock tables tab_name read; 导致 DML 会话等待在表的表级锁上。
会话 1
lock tables tab_name read;
会话 2
会话 3
2. 隐式 lock table
mysqldump 使用默认参数进行数据导出时,会默认的开启 --lock-tables 选项,进而导致导出表上的DML操作等待在表级锁上。
会话 1
会话 2
会话 3
对于 mysqldump 方式的导出,建议在业务低峰期进行导出,并且设置 --single-transaction 选项进行 InnoDB 引擎表导出,避免出现 InnoDB 表级锁等待的情况。