2009-04-06 22 views
7

Ich habe einen langen Prozess in MySQL. Es läuft seit einer Woche. Es gibt eine andere Verbindung zu einem Replikations-Master, aber ich habe die Slave-Verarbeitung angehalten, so dass effektiv nichts weiter passiert.Wie kann ich feststellen, ob ein MySQL-Prozess blockiert ist?

Wie kann ich feststellen, ob dieser Prozess noch funktioniert? Ich wusste, dass es lange dauern würde, weshalb ich es auf eine eigene Datenbankinstanz lege, aber das ist länger als ich erwartet habe. Natürlich, wenn es immer noch Arbeit macht, will ich es nicht töten. Wenn es zombiert ist, dann weiß ich nicht, wie ich die Arbeit erledigen soll, die es tun soll.

Es befindet sich im Status "Daten senden". Die Tabelle ist eine InnoDB, aber ohne FK-Referenzen, die von der Abfrage verwendet werden. Der InnoDB-Status zeigt seit dem Start der Abfrage keine Fehler oder Sperren an.

Alle Gedanken sind willkommen.

Antwort

3

Sie müssen es töten und mit besseren Indizes kommen.

Ich habe einen Job für einen Kerl gemacht. Hatte einen Tisch mit etwa 35 Millionen Zeilen. Sein Batch-Prozess, wie Ihr, hatte eine Woche ausgeführt, ohne Ende in Sicht. Ich habe einige Indizes hinzugefügt, einige Änderungen an der Reihenfolge und den Methoden seines Batch-Prozesses vorgenommen und das Ganze auf ungefähr zweieinhalb Stunden gebracht. Auf einer langsameren Maschine.

+0

Sie haben Recht, dass es nicht so gut indiziert ist wie es sein könnte. Aber wenn die Verbesserung der Indizes den Prozess ausführen würde, würde es nach einer längeren Zeit erfolgreich laufen. Was ich nicht sagen kann, ist, ob es überhaupt etwas tut, an diesem Punkt. – user87843

5

Versuchen Sie "SHOW PROCESSLIST", um zu sehen, was aktiv ist.

Natürlich, wenn Sie es töten, könnte es dann genauso viel Zeit brauchen, um es zurückzurollen.

+0

Sie ist in der Prozessliste im Status 'Daten senden' aktiv. Die Anzahl der Sekunden, die es aktiv war, steigt weiter an. Ich weiß einfach nicht, wie ich sagen soll, ob es tatsächlich etwas tut oder nicht. – user87843

+0

Ändern sich die Dateigrößen? Außerdem sollten Sie einen Effekt in SHOW STATUS (in verschiedenen Wrrites und Caches) sehen. – dkretz

0

Angesichts dessen, was Sie gesagt haben, ist es nicht fest. Es ist jedoch keine Garantie, dass es tatsächlich in etwas ähnlichem endet. Das Hinzufügen von Indizes wird mit ziemlicher Sicherheit helfen und abhängig von der Art der Abfrage, die in eine Reihe von Abfragen umstrukturiert wird, die temporäre Tabellen verwenden, können Sie möglicherweise einen enormen Leistungsschub erzielen. Ich würde nicht vorschlagen, darauf zu warten, dass es vielleicht endet.

1

Um eine bessere Leistung bei einer Datenbank dieser Größe zu erzielen, sollten Sie sich eine dokumentbasierte Datenbank wie mongoDB ansehen. Es wird mehr Speicherplatz auf der Festplatte benötigt, um die Datenbank zu speichern, aber abhängig von Ihrem aktuellen Schema erhalten Sie möglicherweise eine viel bessere Leistung.

Verwandte Themen