sql >> Base de Datos >  >> RDS >> Mysql

Supervisión del progreso de consultas largas de MySQL

Sé que esta es una pregunta antigua, pero estaba buscando una respuesta similar cuando intentaba averiguar cuánto tiempo más tardaría mi actualización en una consulta de 250 m de filas.

Si ejecuta:

SHOW ENGINE INNODB STATUS \G

Luego, en TRANSACCIONES, busque la transacción en cuestión, examine esta sección:

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

El bit importante es "deshacer entradas de registro". Para cada fila actualizada, en mi caso parecía agregar una entrada de registro de deshacer (intentar ejecutarlo nuevamente después de unos segundos y ver cuántos se agregaron).

Si pasa al final del informe de estado, verá esto:

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

Aquí podemos ver que la velocidad de las actualizaciones que se aplican es de 1595,44 filas por segundo (aunque si está ejecutando otras consultas de actualización en tándem, entonces esta velocidad podría estar separada entre sus consultas).

Entonces, a partir de esto, sé que se han actualizado 21 m con (250 m-21 m) 229 m filas por recorrer.

229 000 000 / 1600 =143 125 segundos para el final (143 125 / 60) / 60 =39,76 horas para el final

Entonces parece que puedo jugar con mis pulgares por un par de días más. A menos que esta respuesta sea incorrecta, ¡en cuyo caso la actualizaré antes de esa fecha!