2009-03-13 76 views
12

Tôi biết rằng deadlocks xảy ra không tránh khỏi khi sử dụng giao dịch trong Innodb và rằng chúng vô hại nếu chúng được xử lý đúng theo mã ứng dụng - "chỉ cần thử lại", như hướng dẫn sử dụng.Làm thế nào để phát hiện deadlocks trong Mysql/innodb?

Vì vậy, tôi đã tự hỏi - làm thế nào để bạn phát hiện deadlocks? Có một vấn đề bế tắc một số số lỗi mysql đặc biệt? Tôi đang sử dụng phần mở rộng mysqli của PHP nếu điều đó quan trọng.

Cảm ơn bạn.

Edit: giải pháp phát hiện, xem ý kiến ​​

Trả lời

13

http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html

1213 (ER_LOCK_DEADLOCK)

giao dịch bế tắc. Bạn nên chạy lại giao dịch.

+0

Cảm ơn bạn! Đó là những gì tôi đang tìm kiếm. –

+1

@ S.Lott liên kết bị hỏng –

+0

@ S.Lott google dẫn tôi ở đây .... loại nơi kỳ lạ để nói những điều như vậy ^^ khi đây là một nơi để thu thập thông tin như vậy – OZZIE

5

Hãy thử MaatKit. Nó có một bế tắc bế tắc.

+4

Maatkit đã được hấp thụ vào [Percona Toolkit] (http://www.percona.com/software/percona-toolkit/) gần đây. Công cụ này được gọi là [pt-deadlock-logger] (http://www.percona.com/doc/percona-toolkit/pt-deadlock-logger.html) và trước đây là __mk-deadlock-logger__. – Mei

1

Thử innotop, sẽ phát hiện bế tắc cho bạn.

14

"SHOW ENGINE INNODB STATUS" từ ứng dụng dòng lệnh MySQL (không phải là trình duyệt truy vấn) sẽ cung cấp cho bạn thông tin về deadlocks.

Lỗi vòng cũng có thể do các giao dịch không cam kết (thường là lỗi chương trình) và người đang chạy giao dịch không cam kết sẽ không gặp vấn đề vì chúng sẽ hoạt động tốt (thông qua dữ liệu của chúng sẽ không được cam kết).

+0

Điều này sẽ chỉ hiển thị bế tắc mới nhất. – dr01

5

Thử sử dụng MONyog. Bật tùy chọn "Theo dõi khóa chết" của MONyog để theo dõi các deadlocks được báo cáo bởi INNODB STATUS. MONyog sẽ gửi cảnh báo cho người dùng khi xảy ra bế tắc mới. enter image description here

1

Nếu bạn đang ở trên một mac:

$ brew cài đặt Percona-toolkit

$ pt-bế tắc-logger -uroot --ask-pass localhost

Các vấn đề liên quan