Yanıtlar:
Bir InnoDB tablosuna SELECT veya DML (INSERT, UPDATE, DELETE) aracılığıyla erişiliyorsa, bir meta veri kilidi beklemeniz gerekir.
MetaData Kilitleme ile ilgili MySQL Belgelerine göre :
İşlemin serileştirilmesini sağlamak için, sunucunun bir oturumun başka bir oturumda tamamlanmamış bir işlemde kullanılan bir tablo üzerinde veri tanımı dili (DDL) ifadesi gerçekleştirmesine izin vermemesi gerekir. Sunucu bunu bir işlemde kullanılan tablolarda meta veri kilitleri alarak ve işlem bitene kadar bu kilitlerin bırakılmasını erteleyerek başarır. Tablodaki bir meta veri kilidi, tablonun yapısındaki değişiklikleri önler. Bu kilitleme yaklaşımı, bir oturumda bir işlem tarafından kullanılan bir tablonun, işlem bitene kadar diğer oturumlar tarafından DDL deyimlerinde kullanılamayacağı anlamına gelir.
Olduğu söyleniyor, başka bir DB oturumu masada kilitleri olup olmadığını belirlemek gerekir. Böyle bir oturum tamamlanmamış bir işlemse, bekletmenin nerede olabileceği vardır.
Disk alanına hızlıca geri dönmeniz gerekiyorsa, çalıştırabilirsiniz TRUNCATE TABLE
.
Aşağıdaki gibi bırakmaya çalışmadan önce tabloyu yeniden adlandırmayı deneyin:
ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
foo
. Tüm bu bağlantılar yapıldıktan sonra, ALTER TABLE
devam edebilir.
Aşağıdaki sorguyu yürüterek hangi sorgunun işlem kilidine neden olduğunu bulmalısınız:
SHOW ENGINE INNODB STATUS
ve adlı bir bölüme bakın TRANSACTION
. Daha sonra bir veritabanını bırakmak için bu sorguyu öldürmelisiniz.
Başvuru: Hangi işlemin "Tablo meta veri kilidi bekleniyor" durumuna neden olduğunu nasıl bulabilirim?
foo
yeniden adlandırmasında "Tablo meta veri kilidi bekleniyor"footodrop