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

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.



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.


2
OP twierdzi, że używają 5.6, co (zakładam) to 5.0 lub więcej.
RDFozz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.