MySQL截断挂起

时间:2011-01-14 18:04:39

标签: mysql innodb truncate hang

我正在尝试截断一个包含300,000行的表。当没有其他查询正在运行时,我运行截断查询,它只是挂起。

show processlist;表示州正在“更新”。

服务器版本:5.1.41-3ubuntu12.8(Ubuntu)

该表是InnoDB。

为什么会发生这种情况,或者我如何进一步调查问题?

感谢。

3 个答案:

答案 0 :(得分:5)

我认为这是外键检查问题。

我发现以下内容的工作速度与预期一样快:

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table_name;
SET FOREIGN_KEY_CHECKS = 1;

答案 1 :(得分:0)

我们的一位客户有一张 450GB 尺寸的桌子。我们尝试了各种方法来清空这张桌子,但没有人解决这个问题。

我们试图截断表格,但截断操作花了10多个小时并没有解决问题。当我们在此表的任何查询中使用WHERE statement时,SQL Server会不停地执行查询。

我能够 在1秒内清空表 的唯一方法如下:

set rowcount 1;

truncate table TABLE_NAME;

当然,在截断表之后,只需缩小数据库即可。

通过这种方法,您只需删除指向此表的指针,并通过shrink

删除表的数据行

答案 2 :(得分:0)

虽然不是最技术性的答案,但我今天仍在努力解决这个问题。我尝试了以上所有(锁定表,外键检查,检查innodb引擎状态等等),但没有一个是有用的(尽管在后一种情况下,我根本没有充分理解我正在阅读的内容。)

我有一个拒绝写入锁定,截断,重命名或删除的邮件作业表(尽管完全是空的。)我终于陷入困境并重新启动了mysql服务,此时我可以进行必要的更改,没问题。