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