2011-01-14 9 views
1

Ich versuche, eine Tabelle mit 300.000 Zeilen zu kürzen. Wenn keine anderen Abfragen ausgeführt werden, führe ich die truncate-Abfrage aus und sie hängt einfach.MySQL truncate hängt

show processlist; sagt der Staat ist "update".

Server-Version: 5.1.41-3ubuntu12.8 (Ubuntu)

Der Tisch ist InnoDB.

Irgendwelche Ideen, warum das passiert, oder wie kann ich das Problem weiter untersuchen?

Danke.

+0

möglicherweise relevant: http://bugs.mysql.com/bug.php?id=44918 –

+0

Ja, bitte liste die Ausgabe von show create table tabellenname. Wenn Sie Fremdschlüssel haben, könnte dies das Problem sein. – Gary

+0

Wenn dies die einzige große Tabelle in der Datenbank ist, können Sie die Daten ohne diese Tabelle ausgeben und neu laden. # mysqldump dbName --ignore-table = Audit – shantanuo

Antwort

5

schrumpfen werden entfernt entfernen halte ich es für die Fremdschlüsselprüfung Problem.

Ich habe festgestellt, dass die folgenden Arbeiten so schnell wie erwartet:

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

Einer unserer Kunden hatte eine Tabelle mit 450GB der Größe. Und wir haben alle Möglichkeiten ausprobiert, diesen Tisch zu leeren, aber niemand hat das Problem gelöst.

Wir haben versucht, die Tabelle zu kürzen, aber die Operation abgeschnitten dauerte mehr als 10 Stunden und löste das Problem nicht. Und wenn wir WHERE statement in einer beliebigen Abfrage für diese Tabelle verwendet haben, führt SQL Server die Abfrage ohne anzuhalten aus.

Der einzige Weg, ich kann leer die Tabelle in 1 Sekunde wie folgt war:

set rowcount 1; 

truncate table TABLE_NAME; 

Und natürlich nach der Tabelle Kürzen, gerade gehen und die Datenbank verkleinern.

Durch diesen Ansatz, den Sie nur den Zeiger auf diese Tabelle und Datenreihen Tabelle von

0

zwar nicht die meisten technischen Antworten, ich mit diesem Problem nur heute zu kämpfen. Ich probierte alle oben genannten Punkte aus (Sperrtabellen, Fremdschlüsselüberprüfungen, Überprüfung des Status der Innodb-Maschine usw.), von denen keine nützlich waren (obwohl ich im letzteren Fall einfach nicht ausreichend verstanden habe, was ich gelesen habe.)

Ich hatte eine E-Mail-Job-Tabelle, die nicht gesperrt, abgeschnitten, umbenannt oder gelöscht werden konnte (obwohl sie komplett leer war.) Ich gab schließlich den mysql-Dienst und startete die erforderliche Änderung, kein Problem.