Mengenalpasti Transaksi Menyebabkan Keadaan "Menunggu Kunci Metadata Jadual"
Apabila cuba untuk melaksanakan operasi DDL pada jadual, adalah mungkin untuk menghadapi Mesej "Menunggu kunci metadata jadual" dalam SHOW PROCESSLIST. Ini menunjukkan bahawa transaksi lain masih merujuk jadual, menghalang metadatanya daripada diubah.
Mengenalpasti Transaksi
Versi MySQL sebelum 5.7.3:
Untuk MySQL versi 5.7 .3 dan ke atas:
Untuk mengenal pasti semua transaksi kunci menunggu:
USE INFORMATION_SCHEMA; SELECT * FROM INNODB_LOCK_WAITS;
Untuk mengenal pasti transaksi menyekat:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
Untuk mengenal pasti kunci pada jadual tertentu:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
Untuk mengenal pasti transaksi menunggu kunci:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
Contoh Output:
Pertanyaan INNODB_LOCK_WAITS mungkin memberikan output yang serupa dengan:
... REQUESTING TRXs: trx id 10,mysql thread id 1161142,query SELECT ... trx id 16,mysql thread id 1161141,query SELECT ... ...
Ini menunjukkan bahawa ID transaksi 10 dan 16 sedang menunggu untuk dikunci. Analisis lanjut boleh dijalankan menggunakan pertanyaan lain yang disediakan untuk mengenal pasti transaksi penyekatan dan jadual tertentu sedang dikunci.
Atas ialah kandungan terperinci Bagaimana untuk Mengenalpasti Transaksi yang Menyebabkan \'Menunggu Kunci Metadata Jadual\' dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!