我想截斷有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