Ich benutze MySql 5.0.22 und habe eine wirklich unhandliche Tabelle mit ungefähr 5 Millionen Zeilen.
Einige, aber nicht alle Zeilen werden von einem Fremdschlüssel auf eine andere Tabelle verwiesen.
Alle Versuche, die nicht referenzierten Zeilen zu entfernen, sind bisher fehlgeschlagen, was jedes Mal zu Sperrzeitüberschreitungen führt.
Das Kopieren der Zeilen, die ich in eine alternative Tabelle schreiben möchte, ist ebenfalls mit dem Sperr-Timeout fehlgeschlagen.
Verdächtig, sogar eine Anweisung, die sofort wie die folgende abschließen sollte, scheitert auch mit "Sperr-Timeout":
%Vor%... an diesem Punkt sind mir die Ideen ausgegangen.
Edit: Was es wert ist, habe ich auf meinem Dev-System durchgearbeitet, also benutze ich momentan nur die Datenbank, also sollte es außerhalb der SQL keine Sperrung geben läuft.
Irgendwelche MySql-Gurus da draußen haben Vorschläge, wie man diese abtrünnige Tabelle zähmen kann?
Edit # 2: Wie gewünscht, die Tabellenstruktur:
%Vor%Beachten Sie, versuchen Sie, den FK auch mal zu löschen.
Ok, ich habe endlich einen Ansatz gefunden, der funktioniert, um die unerwünschten Zeilen aus meiner großen InnoDB-Tabelle zu entfernen! Hier ist, wie ich es gemacht habe:
Die ganze Anstrengung sah ungefähr so aus:
%Vor%... seltsamerweise war das Umbenennen der Tabelle der einzige ALTER TABLE-Befehl, der sofort beendet werden würde.
%Vor%... und dann einen Neustart, falls meine vorherigen fehlgeschlagenen Versuche eine neue Arbeit blockieren könnten ...
%Vor%... Sobald ich 100k auf einmal löschte, fiel die Ausführungszeit von InnoDB mit jedem erfolgreichen Befehl ab. Ich nehme an, dass InnoDB beginnt, Read-Ahead bei großen Scans durchzuführen. Doing Commits würde die Read-Ahead-Daten zurücksetzen, also habe ich die COMMITs auf alle 2 Millionen Zeilen aufgeteilt, bis der Job fertig war.
Ich habe die Aufgabe abgeschlossen, indem ich die verbleibenden Zeilen in meine "leere" Klon-Tabelle kopiert habe und dann die alte (umbenannte) Tabelle gelöscht habe.
Keine anmutige Lösung, und es werden keine Gründe angesprochen, warum das Löschen einer einzelnen Zeile aus einer großen Tabelle fehlschlagen sollte, aber zumindest habe ich das Ergebnis erhalten, nach dem ich gesucht habe!