2011-01-14 95 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服務,在這一點上我可以做出所需的更改,沒有問題。