mysql Przekroczono limit czasu oczekiwania na blokadę; spróbuj ponownie uruchomić transakcję

26

uruchomiliśmy aplikację Java, działającą od wieków, zapleczem jest db MySQL, ostatnio zaktualizowany do mysql 5.6. Wszystko działało dobrze, w zeszłym tygodniu pojawił się ten błąd Przekroczono limit czasu oczekiwania blokady; spróbuj zrestartować transakcję, która wygląda na to, że nigdy się nie kończy, nie wiem, co zrobić z tym błędem, aby zatrzymać. dlaczego dzieje się tak nagle

JAVAC
źródło

Odpowiedzi:

29

Możesz ustawić zmienną innodb_lock_wait_timeout = 100 dla czasu blokady na 100 sekund.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

Upłynął limit czasu transakcji, spróbuj zablokować tabelę, która jest wstrzymywana przez inny proces. i zmienną limitu czasu ustawioną z małą liczbą sekund. więc pokazuje błąd. Możesz zobaczyć więcej statusu przez polecenie.

SHOW ENGINE INNODB STATUS\G 

Możesz wyświetlić listę zablokowanych tabel według:

 show open tables where in_use>0;

Teraz zobacz wątek korzystający z tej tabeli

  show full processlist;

teraz możesz zabić ten wątek lub czekać na jego ukończenie.

Hitesh Mundra
źródło
Dzięki za te informacje, ale jak można dotrzeć do źródła problemu, gdy blokady wciąż się zdarzają, nawet przy bardzo prostych tabelach z małymi aktualizacjami (takimi jak zwiększanie lub aktualizowanie pojedynczego pola).
Wouter
-1

Jeśli używasz MySQL w wersji mniejszej niż 5.0, nie możesz zmienić zmiennej nawet dla sesji lub zakresu globalnego. Najlepszym rozwiązaniem jest przechwycenie zapytania i wykonanie go po zwolnieniu ruchu.

Sherry_MySQL
źródło
2
OP twierdzi, że używają 5.6, co (zakładam) to 5.0 lub więcej.
RDFozz