Có một cài đặt đã được giới thiệu trong MySQL 5.5.30: innodb_print_all_deadlocks
Khi tùy chọn này được bật, thông tin về tất cả các bế tắc trong giao dịch người dùng InnoDB được ghi lại trong nhật ký lỗi mysqld. Mặt khác, bạn chỉ thấy thông tin về sự bế tắc cuối cùng, bằng cách sử dụng lệnh SHOW Engine INNODB STATUS. Một bế tắc thỉnh thoảng của InnoDB không nhất thiết là một vấn đề, bởi vì InnoDB phát hiện ra tình trạng này ngay lập tức và tự động quay lại một trong các giao dịch. Bạn có thể sử dụng tùy chọn này để khắc phục sự cố tại sao xảy ra bế tắc nếu ứng dụng không có logic xử lý lỗi thích hợp để phát hiện rollback và thử lại hoạt động của nó. Một số lượng lớn các bế tắc có thể cho thấy sự cần thiết phải cơ cấu lại các giao dịch phát hành DML hoặc CHỌN ... ĐỂ CẬP NHẬT cho nhiều bảng, để mỗi giao dịch truy cập vào các bảng theo cùng một thứ tự, do đó tránh được tình trạng bế tắc.
Chỉ cần thêm cài đặt này vào my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
hoặc là
[mysqld]
innodb_print_all_deadlocks = on
Bạn không phải khởi động lại mysql. Chỉ cần đăng nhập vào mysql và chạy
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Cài đặt này là mới đối với tôi quá.
Hãy dùng thử và cho chúng tôi biết tất cả những gì bạn nghĩ !!!