我想截断有300,000行的表。当没有其他查询正在运行时,我运行截断查询,并且它只是挂起。MySQL截断挂起
show processlist;
表示状态为“更新”。
Server版本:5.1.41-3ubuntu12.8(Ubuntu的)
表是InnoDB的。
任何想法为什么会发生这种情况,或者我如何进一步调查问题?
谢谢。
我想截断有300,000行的表。当没有其他查询正在运行时,我运行截断查询,并且它只是挂起。MySQL截断挂起
show processlist;
表示状态为“更新”。
Server版本:5.1.41-3ubuntu12.8(Ubuntu的)
表是InnoDB的。
任何想法为什么会发生这种情况,或者我如何进一步调查问题?
谢谢。
我认为这是外键检查问题。
我发现了以下工作尽快预期:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table_name;
SET FOREIGN_KEY_CHECKS = 1;
我们的客户之一有一个表450GB的大小。我们试图用各种方法清空这张桌子,但没有人解决这个问题。
我们试图截断表格,但截断操作花了超过10小时并没有解决问题。当我们在该表的任何查询中使用WHERE statement
时,SQL服务器都会执行查询而不停止。
的唯一途径,我可以给空在1秒钟内表是为以下几点:
set rowcount 1;
truncate table TABLE_NAME;
截断表之后,当然还有,只是去和收缩数据库。
通过这种方法,你只是删除指针表的该表和数据行会被删除通过收缩
虽然不是最技术的答案,我这个问题就在今天奋斗。我尝试了上述所有内容(锁定表,外键检查,检查innodb引擎状态,等等),其中没有一个是有用的(尽管在后一种情况下,我只是没有充分理解我正在读的内容。)
我有一个邮件作业表,拒绝写入锁定,截断,重命名或删除(尽管是完全空的)。我终于放弃并重新启动mysql服务,在这一点上我可以做出所需的更改,没有问题。
可能相关:http://bugs.mysql.com/bug.php?id=44918 – 2011-01-14 18:10:45