Vím, že je to stará otázka, ale hledal jsem podobnou odpověď, když jsem se snažil zjistit, jak dlouho bude moje aktualizace trvat na dotazu o 250 milionech řádků.
Pokud spustíte:
SHOW ENGINE INNODB STATUS \G
Poté v části TRANSAKCE vyhledejte příslušnou transakci a prozkoumejte tuto sekci:
---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
Důležitým bodem je „vrátit položky protokolu zpět“. Pro každý aktualizovaný řádek se v mém případě zdálo, že se přidává záznam zpět do protokolu (zkusím to spustit znovu po několika sekundách a uvidíme, kolik jich bylo přidáno).
Pokud přeskočíte na konec zprávy o stavu, uvidíte toto:
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
Zde vidíme, že rychlost aktualizací je 1595,44 řádků za sekundu (ačkoli pokud spouštíte další aktualizační dotazy v tandemu, pak tato rychlost může být mezi vaše dotazy oddělena).
Takže z toho vím, že bylo aktualizováno 21 m s (250 m-21 m) 229 m řádků, které zbývají do konce.
229 000 000 / 1 600 =143 125 sekund do konce (143 125 / 60) / 60 =39,76 hodin do konce
Takže se zdá, že můžu ještě pár dní kroutit palci. Pokud tato odpověď není špatná, v takovém případě ji někdy před tím aktualizuji!