Tidak dapat menjatuhkan tabel sejak ditampilkan menunggu kunci meta data

11

Kami mencoba untuk menjatuhkan satu tabel tapi itu digantung, dan ketika kami melihat perintah 'SHOW PROCESSLIST' itu ditampilkan sebagai 'menunggu kunci data meta'. Bahkan kami tidak dapat melakukan operasi apa pun pada tabel tersebut. Adakah yang tahu bagaimana mengatasinya?

ramya
sumber

Jawaban:

8

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;
RolandoMySQLDBA
sumber
Saran itu tidak berhasil untuk kita. Alih-alih kita mendapatkan "Menunggu kunci metadata tabel" pada ALTER TABLE foorenamefootodrop
Motin
@Motin semua itu artinya satu atau lebih DB Connections masih mengakses tabel foo. Setelah semua koneksi itu selesai, maka ALTER TABLEbisa dilanjutkan.
RolandoMySQLDBA