Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Monitoramento do progresso da consulta longa do MySQL


Eu sei que essa é uma pergunta antiga, mas eu estava procurando uma resposta semelhante, ao tentar descobrir quanto tempo minha atualização levaria em uma consulta de 250 milhões de linhas.

Se você executar:
SHOW ENGINE INNODB STATUS \G

Em seguida, em TRANSAÇÕES, encontre a transação em questão, examine esta seção:
---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

A parte importante é "desfazer entradas de log". Para cada linha atualizada, no meu caso, parecia adicionar uma entrada de log de desfazer (tentando executá-la novamente após alguns segundos e ver quantos foram adicionados).

Se você pular para o final do relatório de status, verá isto:
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

Aqui podemos ver que as atualizações de velocidade estão sendo aplicadas é de 1595,44 linhas por segundo (embora se você estiver executando outras consultas de atualização em conjunto, essa velocidade pode ser separada entre suas consultas).

Então, a partir disso, eu sei que 21m foram atualizados com (250m-21m) 229m linhas restantes.

229.000.000 / 1600 =143.125 segundos para ir (143.125 / 60) / 60 =39,76 horas para ir

Então parece que eu posso girar meus polegares por mais alguns dias. A menos que esta resposta esteja errada, nesse caso eu a atualizarei antes disso!