由于显示等待元数据锁定,因此无法删除该表


11

我们正在尝试删除一个表,但该表已被挂起,并且当我们看到“ SHOW PROCESSLIST”命令时,该表显示为“等待元数据锁定”。甚至我们也无法对该特定表执行任何操作。有人知道如何解决吗?

Answers:


8

如果通过SELECT或DML(INSERT,UPDATE,DELETE)完全访问InnoDB表,则应该正确地期望元数据锁定。

根据有关MetaData LockingMySQL文档

为了确保事务可序列化,服务器不得允许一个会话对另一个会话中未完成事务中使用的表执行数据定义语言(DDL)语句。服务器通过获取事务中使用的表上的元数据锁并将这些锁的释放推迟到事务结束之前来实现。表上的元数据锁可防止更改表的结构。这种锁定方法的含义是,在一个事务内的事务正在使用的表不能在事务结束之前由其他会话在DDL语句中使用。

话虽如此,您应该确定另一个数据库会话是否在表上持有锁。如果这样的会话是未完成的事务,则可能存在延迟。

如果您只需要快速返回磁盘空间,则可以运行TRUNCATE TABLE

建议

在尝试删除表之前,请尝试重命名该表,如下所示:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

这个建议对我们没有用。取而代之的是,我们在ALTER TABLE foo重命名上得到“正在等待表元数据锁定”footodrop
Motin

@Motin的全部意思是一个或多个数据库连接仍在访问table foo。完成所有这些连接后,ALTER TABLE即可继续。
RolandoMySQLDBA

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.