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


12

Ten błąd pojawia się wielokrotnie 4-5 razy.

SQLSTATE [HY000]: Błąd ogólny: 1205 Przekroczono limit czasu oczekiwania na blokadę; spróbuj ponownie uruchomić transakcję

Tym razem ponownie uruchamiam phpmyadmin, ale zdarza się to raz po raz. Nie jestem w stanie wskazać tego problemu.

Używam Magento ver. 1.9.0.1 na stronie internetowej. Mam ponad 7000 produktów. Na serwerze mam 16 GB pamięci RAM.

Jak rozwiązać ten problem?

Odpowiedzi:


8

Należy rozważyć zwiększenie wartości limitu czasu oczekiwania na blokadę dla InnoDB poprzez ustawienie innodb_lock_wait_timeout , domyślnie 50 sekund

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

Za /etc/my.cnfpomocą tego wiersza możesz ustawić wyższą wartość na stałe

[mysqld]
innodb_lock_wait_timeout=120

i zrestartuj mysql. Jeśli nie możesz teraz ponownie uruchomić mysql, uruchom to:

SET GLOBAL innodb_lock_wait_timeout = 120; 

Możesz także ustawić go na czas trwania sesji

SET innodb_lock_wait_timeout = 120; 

a następnie zapytanie


3
dlaczego nie 140 'lub 2000'? jak to może faktycznie rozwiązać problem? ukrywając to?
Elzo Valugi,

masz problem, który powoduje, że tabele są blokowane bardziej niż jest to uzasadnione. Jeśli to zrobisz, zmusisz się do czekania 2 minut za każdym razem zamiast jednokrotnego rozwiązania problemu. I jak mówi Elzo ... co się stanie, gdy 120 nie wystarczy?
Carlos Robles

7

Ten komunikat zostanie wyświetlony, jeśli zawartość bazy danych, do której próbujesz uzyskać dostęp, została zablokowana przez (zwykle długo działający) poprzedni proces. MySQL będzie czekał przez pewien czas na usunięcie blokady, zanim zrezygnuje i wyrzuci ten błąd. Jeśli jesteś w stanie śledzić, kiedy widzisz te komunikaty o błędach aż do dowolnej stałej pory dnia, powinieneś sprawdzić, co jeszcze serwer robi w tym czasie - na przykład uruchomiona jest kopia zapasowa bazy danych. W ten sposób powinieneś być w stanie zawęzić możliwości tego, jakie procesy mogą tworzyć blokadę, chociaż nie zawsze jest to tak proste do zrobienia - prawdopodobnie będzie to trochę prób i błędów.


5

Przyczyną tego problemu jest to, że uruchamiasz wiele niestandardowych skryptów i zabijasz je, zanim połączenie z bazą danych zostanie zamknięte.

Coś blokuje wykonanie zapytania. Najprawdopodobniej kolejne zapytanie aktualizujące, wstawiające lub usuwające jedną z tabel w zapytaniu. Musisz dowiedzieć się, co to jest:

Jeśli możesz zalogować się do MySQL z CLI i uruchomić następującą komendę

SHOW PROCESSLIST;

Po zlokalizowaniu procesu blokowania / uśpienia znajdź go idi uruchom:

KILL {id};

Ponownie uruchom pierwsze zapytanie.

Być może ten link pomoże ci: SQLSTATE [HY000]: Błąd ogólny: 1205 Przekroczono limit czasu oczekiwania na blokadę; spróbuj zrestartować transakcję Magento .


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.