MySQL出现MetadataLock锁等待,如何定位DDL引发的表锁阻塞问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计921个文字,预计阅读时间需要4分钟。
由于MySQL的MDL(Metadata Lock)锁是表级别的、隐式的、自动加的,只有当一个事务还在访问某张表时(例如,执行SELECT语句),后续对该表的任何DDL操作(如ALTER TABLE)都必须等待该事务释放MDL读锁。因此,若要避免这种情况,应确保在执行DDL操作前,没有其他事务正在访问该表。这通常通过设置autocommit=0来关闭自动提交,然后执行查询,不进行COMMIT或ROLLBACK,以保持事务状态,从而持续持有MDL读锁。
本文共计921个文字,预计阅读时间需要4分钟。
由于MySQL的MDL(Metadata Lock)锁是表级别的、隐式的、自动加的,只有当一个事务还在访问某张表时(例如,执行SELECT语句),后续对该表的任何DDL操作(如ALTER TABLE)都必须等待该事务释放MDL读锁。因此,若要避免这种情况,应确保在执行DDL操作前,没有其他事务正在访问该表。这通常通过设置autocommit=0来关闭自动提交,然后执行查询,不进行COMMIT或ROLLBACK,以保持事务状态,从而持续持有MDL读锁。

