Terima kasih atas jemputan. Metadata Lock (MDL) telah diperkenalkan ke dalam mekanisme perlindungan metadata mysql dalam 5.5. 5.5 Perlindungan metadata berada pada tahap transaksi, dan MDL dikeluarkan hanya selepas transaksi tamat. Apabila sesi melakukan operasi DML dalam pangkalan data utama dan belum diserahkan, sesi lain melakukan operasi DDL seperti drop table pada objek yang sama Memandangkan binlog MySQL direkodkan berdasarkan susunan penyerahan transaksi, jadi dalam Apabila memohon dari perpustakaan, akan berlaku situasi di mana jadual dijatuhkan dahulu dan kemudian dimasukkan ke dalam jadual, menyebabkan ralat dalam aplikasi dari perpustakaan. Oleh itu, MySQL memperkenalkan kunci Metadata selepas versi 5.5.3 Kunci Metadata hanya akan dikeluarkan selepas urus niaga tamat, jadi operasi DDL tidak boleh dilakukan sebelum transaksi dilakukan atau ditarik balik. Punca Menunggu kunci metadata jadual biasanya adalah senario mudah berikut: Senario 1: Transaksi lama berjalan, menyekat DDL dan kemudian menyekat semua operasi berikutnya pada jadual yang sama Senario 2 : Urus niaga tidak diserahkan, menyekat DDL dan kemudian menyekat semua operasi seterusnya pada jadual yang sama
Jadi bagaimana untuk menyelesaikannya? Lihat semua kunci transaksi dalam keadaan menunggu disekat
USE INFORMATION_SCHEMA
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
Atau anda boleh menyasarkan jadual tertentu secara langsung
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
Memadamkan rekod yang berkaitan secara langsung akan membuka kunci kunci.
Cadangan: Gunakan kumpulan sambungan dan bukannya berkongsi sambungan untuk semua urutan dan ingat untuk melakukan atau tarik balik setiap transaksi. Rujukan yang disyorkan: https://dev.mysql.com/doc/ref... http://www.cnblogs.com/cchust... https://gold .xitu.io/entry/57... http://www.cnblogs.com/digdee...
Pertama sekali, beberapa utas berkongsi satu sambungan, yang bersamaan dengan concurrency Banyak utas perlu menunggu. Kadar penggunaan satu sambungan bagi setiap utas tidak tinggi, jadi ia biasanya merupakan kumpulan sambungan. Tidak perlu untuk mengitar semula, dan sambungan sentiasa dikekalkan, mengelakkan sambungan terputus yang kerap.
Dengan gambar, sama ada subjek telah membuka transaksi
Terima kasih atas jemputan. Metadata Lock (MDL) telah diperkenalkan ke dalam mekanisme perlindungan metadata mysql dalam 5.5. 5.5 Perlindungan metadata berada pada tahap transaksi, dan MDL dikeluarkan hanya selepas transaksi tamat.
Apabila sesi melakukan operasi DML dalam pangkalan data utama dan belum diserahkan, sesi lain melakukan operasi DDL seperti drop table pada objek yang sama Memandangkan binlog MySQL direkodkan berdasarkan susunan penyerahan transaksi, jadi dalam Apabila memohon dari perpustakaan, akan berlaku situasi di mana jadual dijatuhkan dahulu dan kemudian dimasukkan ke dalam jadual, menyebabkan ralat dalam aplikasi dari perpustakaan. Oleh itu, MySQL memperkenalkan kunci Metadata selepas versi 5.5.3 Kunci Metadata hanya akan dikeluarkan selepas urus niaga tamat, jadi operasi DDL tidak boleh dilakukan sebelum transaksi dilakukan atau ditarik balik.
Punca Menunggu kunci metadata jadual biasanya adalah senario mudah berikut:
Senario 1: Transaksi lama berjalan, menyekat DDL dan kemudian menyekat semua operasi berikutnya pada jadual yang sama
Senario 2 : Urus niaga tidak diserahkan, menyekat DDL dan kemudian menyekat semua operasi seterusnya pada jadual yang sama
Jadi bagaimana untuk menyelesaikannya?
Lihat semua kunci transaksi dalam keadaan menunggu disekat
Atau anda boleh menyasarkan jadual tertentu secara langsung
Memadamkan rekod yang berkaitan secara langsung akan membuka kunci kunci.
Cadangan: Gunakan kumpulan sambungan dan bukannya berkongsi sambungan untuk semua urutan dan ingat untuk melakukan atau tarik balik setiap transaksi.
Rujukan yang disyorkan:
https://dev.mysql.com/doc/ref...
http://www.cnblogs.com/cchust...
https://gold .xitu.io/entry/57...
http://www.cnblogs.com/digdee...
Jadual adalah daripada Innodb, tetapi penyerahan automatik tidak didayakan dan tiada penyerahan manual.
Pertama sekali, beberapa utas berkongsi satu sambungan, yang bersamaan dengan concurrency Banyak utas perlu menunggu.
Kadar penggunaan satu sambungan bagi setiap utas tidak tinggi, jadi ia biasanya merupakan kumpulan sambungan. Tidak perlu untuk mengitar semula, dan sambungan sentiasa dikekalkan, mengelakkan sambungan terputus yang kerap.
Dengan gambar, sama ada subjek telah membuka transaksi