Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Das Löschen einer Tabelle lässt MySQL hängen

Waiting for table metadata lock
drop table tableA name

SELECT l1.lat, l1.lon, l2.zipcode FROM tableA l1, tableBl2 where l1.lat = l2.latitude and l1.lon = l2.longitude limit 10

Wenn dies Ihre Tabelle ist, sehen Sie sich diesen Link an

Sie haben einen impliziten Deadlock. Beenden Sie die anderen Transaktionen, um den Drop freizugeben, oder beenden Sie den Drop, um die anderen Transaktionen freizugeben.

Sie können KILL verwenden thread_id, in sql_plus.

Ich füge weitere Informationen hinzu, da ich auf eine andere interessante Erfahrung gekommen bin.

Metadata Deadlocks können auch zwischen einer ddl-Operation auf einer bestimmten Tabelle auftreten (drop , alter ...) und auswählen Abfrage auf dieser Tabelle.

Ja, select .

Wenn Sie also in mysql (oder php, zum Beispiel mit pdo::fetch ) und Sie führen eine ddl-Anweisung für dieselbe(n) Tabelle(n) aus, erhalten Sie einen Deadlock.

Eine Lösung für dieses atypische Szenario besteht darin, die impliziten Sperren mit einem commit freizugeben -Anweisung systematisch, nachdem eine beliebige Select-Anweisung vollständig abgerufen wurde.