Mysql
 sql >> Database >  >> RDS >> Mysql

Monitoraggio dell'avanzamento delle query lunghe MySQL

So che questa è una vecchia domanda, ma stavo cercando una risposta simile, quando cercavo di capire quanto tempo sarebbe durato il mio aggiornamento su una query di 250 milioni di righe.

Se corri:

SHOW ENGINE INNODB STATUS \G

Quindi in TRANSAZIONI trova la transazione in questione, esamina questa sezione:

---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

Il bit importante è "annulla voci di registro". Per ogni riga aggiornata, nel mio caso sembrava aggiungere una voce di registro di annullamento (provando a eseguirla di nuovo dopo qualche secondo e vedere quante ne sono state aggiunte).

Se salti alla fine del rapporto sullo stato, vedrai questo:

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

Qui possiamo vedere che gli aggiornamenti di velocità applicati sono 1595,44 righe al secondo (sebbene se esegui altre query di aggiornamento in tandem, questa velocità potrebbe essere separata tra le tue query).

Quindi, da questo, so che sono stati aggiornati 21 milioni con (250-21 m) 229 milioni di righe rimaste da percorrere.

229.000.000 / 1600 =143.125 secondi alla fine (143.125 / 60) / 60 =39,76 ore alla fine

Quindi sembrerebbe che posso girare i pollici per un altro paio di giorni. A meno che questa risposta non sia sbagliata, nel qual caso la aggiornerò prima di allora!