Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Überwachung des Fortschritts langer MySQL-Abfragen

Ich weiß, dass dies eine alte Frage ist, aber ich habe nach einer ähnlichen Antwort gesucht, als ich versuchte herauszufinden, wie lange mein Update für eine Abfrage von 250 Millionen Zeilen dauern würde.

Wenn Sie ausführen:

SHOW ENGINE INNODB STATUS \G

Suchen Sie dann unter TRANSAKTIONEN die betreffende Transaktion und sehen Sie sich diesen Abschnitt an:

---TRANSACTION 34282360, ACTIVE 71195 sec starting index read
mysql tables in use 2, locked 2
1985355 lock struct(s), heap size 203333840, 255691088 row lock(s), undo log entries 21355084

Das wichtige Bit ist "Log-Einträge rückgängig machen". Für jede aktualisierte Zeile schien in meinem Fall ein Undo-Log-Eintrag hinzugefügt zu werden (versuchen Sie es nach ein paar Sekunden erneut und sehen Sie, wie viele hinzugefügt wurden).

Wenn Sie zum Ende des Statusberichts springen, sehen Sie Folgendes:

Number of rows inserted 606188224, updated 251615579, deleted 1667, read 54873415652
0.00 inserts/s, 1595.44 updates/s, 0.00 deletes/s, 3190.88 reads/s

Hier können wir sehen, dass die angewendeten Geschwindigkeitsaktualisierungen 1595,44 Zeilen pro Sekunde betragen (wenn Sie jedoch andere Aktualisierungsabfragen gleichzeitig ausführen, kann diese Geschwindigkeit zwischen Ihren Abfragen getrennt sein).

Daher weiß ich, dass 21 Millionen aktualisiert wurden, wobei (250 m-21 Millionen) 229 Millionen Zeilen übrig bleiben.

229.000.000 / 1600 =noch 143.125 Sekunden (143.125 / 60) / 60 =noch 39,76 Stunden

Es sieht also so aus, als könnte ich noch ein paar Tage mit den Daumen drehen. Es sei denn, diese Antwort ist falsch, in diesem Fall werde ich sie irgendwann vorher aktualisieren!