Xem một số bế tắc cuối cùng


12

Tôi thấy rằng tôi có thể xem bế tắc mới nhất trong mysql / innodb, nhưng có cách nào để xem các bế tắc trong quá khứ không? Chúng tôi có hai vấn đề bế tắc, một là quan trọng và một là không. Bế tắc ít quan trọng hơn xảy ra nhiều lần trong ngày để nó trở thành bế tắc "mới nhất".

Câu trả lời:


15

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ĩ !!!


Chúng tôi đang chạy 5.5.34. Có bất kỳ tùy chọn cho phiên bản của chúng tôi?
gwgeller

Lỗi của tôi. Đó là trong 5,5 dev.mysql.com/doc/refman/5.5/vi/ . Tôi sẽ cập nhật câu trả lời của tôi.
RolandoMySQLDBA

Hoạt động như quảng cáo, cảm ơn! Tôi đã thay đổi cài đặt bằng sql vì vậy tôi không phải khởi động lại. Thật trùng hợp, một vài trong số những bế tắc ít nghiêm trọng đã xảy ra và xuất hiện trong nhật ký lỗi.
gwgeller

Đặt giá trị trong thời gian chạy không hoạt động đối với tôi, nó không ghi gì trong nhật ký lỗi.
lapo

1
@Jordan AWS không bao giờ đưa ra SUPER và tôi đã đề cập đến điều này 6 năm trước: dba.stackexchange.com/questions/34525/ . Họ sử dụng các kích hoạt để đảm bảo bạn không thể hack mysql.uservà chạy FLUSH PRIVILEGES;.
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.