2010-04-28 11 views
23

Was passiert, wenn Sie eine lang andauernde Alter-Abfrage beenden? Wird die Alter-Abfrage einfach zurückgesetzt? Wie lange könnte das dauern (im Verhältnis zu der Zeit, die es bereits läuft)?Was passiert, wenn Sie eine lang andauernde Alter-Abfrage beenden?

Was passiert, wenn diese Abfrage auf einem anderen Server repliziert wird? Wird durch das Löschen des Prozesses auf dem anderen Server die alter-Abfrage des ursprünglichen Servers zurückgesetzt?

Wir führen mysql

+27

Haha, es tut mir leid, ich habe ein urkomisches Bild von einer Gruppe von Ingenieuren, die sich um einen Monitor drängen und in diesem Beitrag durch ihre verschwitzten Augenbrauen blicken - nur auf eine Antwort wartend - während ein mysql Server im Hintergrund anfängt Rauch. –

+0

haha, wir mussten es so lange rauchen lassen, bis die Anfrage beendet war. Aber es wäre schön, das nächste Mal zu wissen .. Gott bewahre –

+0

Nun, hier bin ich. Ich war in dem Fall, wo eine Kopie gemacht wurde, also war es in Ordnung, aber es war Schwitzen beteiligt. Gott sei Dank war es nicht in Produktion, aber die Schreibsperre ist berüchtigt. – Aki

Antwort

12

Es hängt davon ab, was Sie tun. Wenn Sie an alter table...add index Befehl auf einer InnoDB Tabelle ausführen (nicht so sicher über MyISAM), dann wird es einfach laufen und laufen, wie es die ganze verdammte Tabelle lock-stock-and-barrel zuerst kopiert: wenn es mitten in "Kopie zu temp-table "dann ist es ziemlich unaufhaltbar.

See here:

In den meisten Fällen TABLE Arbeiten von ALTER eine temporäre Kopie der ursprünglichen Tisch. Die Änderung wird auf der Kopie durchgeführt, und dann wird die ursprüngliche Tabelle gelöscht und die neue wird umbenannt. Während ALTER TABLE ausgeführt wird, ist die ursprüngliche Tabelle , die von anderen Sitzungen gelesen werden kann. Updates und schreibt in die Tabelle bis die neue Tabelle bereit ist, und dann werden automatisch an die neue Tabelle ohne irgendwelche fehlgeschlagene Updates umgeleitet werden.

+2

Es sieht so aus, als ob in unserem Fall "kein temporärer Tisch nötig ist" - aber es sieht so aus, als ob unsere Tische immer noch verschlossen sind, unsere offenen Verbindungen aufgestockt sind und wir einen Ausfall von 5 bis 10 Minuten hatten. Wenn wir eine Abfrage beenden, die * keine * Kopie erstellt ... was dann? –

+0

@BT: Wie kommt es, dass keine temporäre Tabelle erstellt wurde, was ist Ihr spezifischer Fall? – Aki

+2

BTW, ich habe den Prozess während der Kopie in temporäre Tabelle getötet, es entfernt die Schreibsperre und die Daten waren immer noch da und zugänglich. Ich habe keine Ahnung, wo die Temp-Kopie hingelangt ist. – Aki

0

Was passiert, wenn die Abfrage auf einem anderen Server repliziert wird?

Der ALTER wird ebenfalls auf diesem Server ausgeführt, mit den damit verbundenen Auswirkungen.

Wird durch das Löschen des Prozesses auf dem anderen Server die alter-Abfrage des ursprünglichen Servers zurückgesetzt?

Nein. Der ursprüngliche Server hat keinen Rückkanal, um zu erfahren, was auf dem Slave aufgetreten ist (oder nicht). Wenn Sie den ALTER auf dem Slave beenden, werden Sie in der Situation enden, in der der Master die neue Integritätsbedingung oder den neuen Index hat und der Slave dies nicht tut. Dies ist selten ein Rezept für Glück :)

Sobald ein ALTER das Replikationsprotokoll eingibt, müssen Sie es entweder überall ausführen lassen oder es überall löschen.

Verwandte Themen