Jika tabel InnoDB sedang diakses sama sekali melalui SELECT atau DML (INSERT, UPDATE, DELETE), Anda seharusnya mengharapkan kunci metadata.
Menurut Dokumentasi MySQL tentang Penguncian MetaData :
Untuk memastikan serializability transaksi, server tidak boleh mengizinkan satu sesi untuk melakukan pernyataan bahasa definisi data (DDL) pada tabel yang digunakan dalam transaksi yang tidak selesai di sesi lain. Server mencapai ini dengan memperoleh kunci metadata pada tabel yang digunakan dalam transaksi dan menunda pelepasan kunci-kunci itu sampai transaksi berakhir. Kunci metadata pada tabel mencegah perubahan pada struktur tabel. Pendekatan penguncian ini memiliki implikasi bahwa tabel yang sedang digunakan oleh transaksi dalam satu sesi tidak dapat digunakan dalam laporan DDL oleh sesi lain sampai transaksi berakhir.
Yang sedang berkata, Anda harus menentukan apakah Sesi DB lain memegang kunci di atas meja. Jika sesi seperti itu adalah transaksi yang belum selesai, ada kemungkinan penahanan.
Jika Anda hanya perlu ruang disk kembali dengan cepat, Anda bisa menjalankannya TRUNCATE TABLE
.
SARAN
Coba ganti nama tabel sebelum mencoba menjatuhkannya sebagai berikut:
ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
foo
renamefootodrop
foo
. Setelah semua koneksi itu selesai, makaALTER TABLE
bisa dilanjutkan.Anda harus menemukan kueri mana yang menyebabkan kunci transaksi dengan mengeksekusi:
dan lihat bagian bernama
TRANSACTION
. Kemudian Anda harus membunuh permintaan itu untuk menjatuhkan basis data.Referensi: Bagaimana cara menemukan transaksi mana yang menyebabkan status "Menunggu metadata kunci tabel"?
sumber