Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Monitorowanie postępu długich zapytań MySQL

Wiem, że to stare pytanie, ale szukałem podobnej odpowiedzi, próbując obliczyć, jak długo moja aktualizacja zajmie zapytanie obejmujące 250m wierszy.

Jeśli biegasz:

SHOW ENGINE INNODB STATUS \G

Następnie w obszarze TRANSAKCJE znajdź daną transakcję, zapoznaj się z tą sekcją:

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

Ważnym bitem jest „cofnij wpisy dziennika”. Dla każdego zaktualizowanego wiersza w moim przypadku wydawało się, że dodano wpis do dziennika cofania (próbuję uruchomić go ponownie po kilku sekundach i zobaczyć, ile zostało dodanych).

Jeśli przejdziesz do końca raportu o stanie, zobaczysz następujący komunikat:

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

Tutaj widzimy, że stosowane aktualizacje prędkości wynoszą 1595,44 wierszy na sekundę (chociaż jeśli uruchamiasz inne zapytania aktualizacyjne w tandemie, ta prędkość może być rozdzielona między zapytaniami).

Więc z tego wiem, że 21m zostało zaktualizowanych (250m-21m) 229m rzędów pozostało do przejścia.

229 000 000 / 1600 =143 125 sekund do końca (143 125 / 60) / 60 =39,76 godzin do końca

Wygląda na to, że mogę kręcić kciukami jeszcze przez kilka dni. Chyba że ta odpowiedź jest błędna, w takim przypadku zaktualizuję ją wcześniej!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLException:metoda executeQuery nie może być użyta do aktualizacji

  2. Wyzwalacz MySQL:Usuń z tabeli PO USUNIĘCIU

  3. PDO Wiele zapytań:zatwierdź i wycofaj transakcję

  4. Kontynuuj zapytanie SQL nawet w przypadku błędów w środowisku MySQL

  5. DAY() Przykłady – MySQL