2011-01-14 82 views
1

我想截断有300,000行的表。当没有其他查询正在运行时,我运行截断查询,并且它只是挂起。MySQL截断挂起

show processlist;表示状态为“更新”。

Server版本:5.1.41-3ubuntu12.8(Ubuntu的)

表是InnoDB的。

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

谢谢。

+0

可能相关:http://bugs.mysql.com/bug.php?id=44918 – 2011-01-14 18:10:45

回答

5

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

我发现了以下工作尽快预期:

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

我们的客户之一有一个表450GB的大小。我们试图用各种方法清空这张桌子,但没有人解决这个问题。

我们试图截断表格,但截断操作花了超过10小时并没有解决问题。当我们在该表的任何查询中使用WHERE statement时,SQL服务器都会执行查询而不停止。

的唯一途径,我可以给空在1秒钟内表是为以下几点:

set rowcount 1; 

truncate table TABLE_NAME; 

截断表之后,当然还有,只是去和收缩数据库。

通过这种方法,你只是删除指针表的该表和数据行会被删除通过收缩

0

虽然不是最技术的答案,我这个问题就在今天奋斗。我尝试了上述所有内容(锁定表,外键检查,检查innodb引擎状态,等等),其中没有一个是有用的(尽管在后一种情况下,我只是没有充分理解我正在读的内容。)

我有一个邮件作业表,拒绝写入锁定,截断,重命名或删除(尽管是完全空的)。我终于放弃并重新启动mysql服务,在这一点上我可以做出所需的更改,没有问题。