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 !