Lihat beberapa kebuntuan innodb terakhir

12

Saya melihat bahwa saya dapat melihat kebuntuan terbaru di mysql / innodb, tetapi apakah ada cara untuk melihat kebuntuan terakhir? Kami memiliki dua masalah kebuntuan, yang satu penting dan yang lainnya tidak. Kebuntuan yang kurang penting terjadi beberapa kali sehari sehingga menjadi kebuntuan "terbaru".

gwgeller
sumber

Jawaban:

15

Ada pengaturan yang diperkenalkan di MySQL 5.5.30: innodb_print_all_deadlocks

Ketika opsi ini diaktifkan, informasi tentang semua kebuntuan dalam transaksi pengguna InnoDB dicatat dalam log kesalahan mysqld. Jika tidak, Anda melihat informasi tentang hanya kebuntuan terakhir, menggunakan perintah SHOW ENGINE INNODB STATUS. Kebuntuan InnoDB sesekali tidak selalu menjadi masalah, karena InnoDB segera mendeteksi kondisi tersebut, dan memutar kembali salah satu transaksi secara otomatis. Anda mungkin menggunakan opsi ini untuk memecahkan masalah mengapa deadlock terjadi jika aplikasi tidak memiliki logika penanganan kesalahan yang sesuai untuk mendeteksi rollback dan coba lagi operasinya. Sejumlah besar kebuntuan mungkin menunjukkan kebutuhan untuk merestrukturisasi transaksi yang mengeluarkan DML atau SELECT ... UNTUK UPDATE pernyataan untuk beberapa tabel, sehingga setiap transaksi mengakses tabel dalam urutan yang sama, sehingga menghindari kondisi kebuntuan.

Tambahkan saja pengaturan ini ke my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

atau

[mysqld]
innodb_print_all_deadlocks = on

Anda tidak harus memulai ulang mysql. Cukup login ke mysql dan jalankan

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Pengaturan ini juga baru bagi saya.

Cobalah dan beri tahu kami semua pendapat Anda !!!

RolandoMySQLDBA
sumber
Kami menjalankan 5.5.34. Apakah ada opsi untuk versi kami?
gwgeller
Kesalahanku. Itu ada di 5.5 dev.mysql.com/doc/refman/5.5/en/… . Saya akan memperbarui jawaban saya.
RolandoMySQLDBA
Berfungsi seperti yang diiklankan, terima kasih! Saya mengubah pengaturan menggunakan sql jadi saya tidak perlu me-restart. Kebetulan beberapa kebuntuan yang kurang serius terjadi dan muncul di log kesalahan.
gwgeller
Mengatur nilai saat runtime tidak berfungsi untuk saya, itu tidak menulis apa pun di log kesalahan.
Lapo
1
@Jordan AWS tidak pernah memberikan SUPER dan saya menyebutkan ini 6 tahun yang lalu: dba.stackexchange.com/questions/34525/… . Mereka menggunakan pemicu untuk memastikan Anda tidak bisa meretas mysql.userdan menjalankan FLUSH PRIVILEGES;.
RolandoMySQLDBA