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 !!!
mysql.user
i uruchomićFLUSH PRIVILEGES;
.