Mysql
 sql >> Base de données >  >> RDS >> Mysql

Surveillance de la progression des requêtes longues MySQL

Je sais que c'est une vieille question, mais je cherchais une réponse similaire, en essayant de déterminer combien de temps ma mise à jour prendrait sur une requête de 250 millions de lignes.

Si vous exécutez :

SHOW ENGINE INNODB STATUS \G

Ensuite, sous TRANSACTIONS, recherchez la transaction en question, examinez cette section :

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

Le bit important est "annuler les entrées du journal". Pour chaque ligne mise à jour, dans mon cas, il semblait ajouter une entrée de journal d'annulation (essayez de l'exécuter à nouveau après quelques secondes et voyez combien ont été ajoutées).

Si vous passez à la fin du rapport d'état, vous verrez ceci :

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

Ici, nous pouvons voir que les mises à jour de vitesse sont appliquées à 1595,44 lignes par seconde (bien que si vous exécutez d'autres requêtes de mise à jour en tandem, cette vitesse peut être séparée entre vos requêtes).

Donc, à partir de là, je sais que 21 m ont été mis à jour avec (250 m-21 m) 229 m de rangées restantes.

229 000 000 / 1600 =143 125 secondes restantes(143 125 / 60) / 60 =39,76 heures restantes

Il semblerait donc que je puisse me tourner les pouces pendant encore quelques jours. À moins que cette réponse ne soit fausse, auquel cas je la mettrai à jour avant !