Zobacz kilka ostatnich zakleszczeń innodb


12

Widzę, że mogę wyświetlić najnowszą impas w mysql / innodb, ale czy istnieje sposób, aby wyświetlić wcześniejsze impasy? Mamy dwa problemy z impasem, z których jeden jest ważny, a drugi nie. Mniej ważny impas zdarza się kilka razy dziennie, więc staje się „najnowszym” impasem.

Odpowiedzi:


15

Istnieje ustawienie wprowadzone w MySQL 5.5.30: innodb_print_all_deadlocks

Gdy ta opcja jest włączona, informacje o wszystkich zakleszczeniach w transakcjach użytkownika InnoDB są zapisywane w dzienniku błędów mysqld. W przeciwnym razie zobaczysz informacje tylko o ostatnim impasie za pomocą polecenia SHOW ENGINE INNODB STATUS. Sporadyczny impas InnoDB niekoniecznie stanowi problem, ponieważ InnoDB natychmiast wykrywa ten warunek i automatycznie wycofuje jedną z transakcji. Możesz użyć tej opcji, aby rozwiązać problemy z zakleszczeniami, jeśli aplikacja nie ma odpowiedniej logiki obsługi błędów w celu wykrycia wycofania i ponowienia próby działania. Duża liczba zakleszczeń może wskazywać na potrzebę restrukturyzacji transakcji, które wydają instrukcje DML lub SELECT ... FOR UPDATE dla wielu tabel, tak aby każda transakcja uzyskiwała dostęp do tabel w tej samej kolejności, unikając w ten sposób stanu zakleszczenia.

Po prostu dodaj to ustawienie do my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

lub

[mysqld]
innodb_print_all_deadlocks = on

Nie musisz restartować mysql. Zaloguj się do mysql i uruchom

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

To ustawienie też jest dla mnie nowe.

Spróbuj i powiedz nam wszystko, co myślisz !!!


Działamy w wersji 5.5.34. Czy są jakieś opcje dla naszej wersji?
gwgeller

Mój błąd. Jest w wersji 5.5 dev.mysql.com/doc/refman/5.5/en/… . Zaktualizuję moją odpowiedź.
RolandoMySQLDBA

Działa jak w reklamie, dzięki! Zmieniłem ustawienie za pomocą sql, więc nie musiałem restartować. Przypadkowo wystąpiło kilka mniej poważnych zakleszczeń, które pojawiły się w dzienniku błędów.
gwgeller

Ustawienie wartości w czasie wykonywania nie działa dla mnie, nie zapisuje nic w dzienniku błędów.
lapo,

1
@Jordan AWS nigdy nie rozdaje SUPER i wspominałem o tym 6 lat temu: dba.stackexchange.com/questions/34525/… . Używają wyzwalaczy, aby upewnić się, że nie możesz włamać się mysql.useri uruchomić FLUSH PRIVILEGES;.
RolandoMySQLDBA
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.