sql >> Databasteknik >  >> RDS >> Mysql

Tappabord gör att MySQL hänger

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

Om detta är din tabell, se denna länk

du har ett implicit dödläge. Döda de andra transaktionerna för att släppa släppet, eller döda släppet för att släppa de andra transaktionerna.

Du kan använda KILL thread_id, i sql_plus.

Jag lägger till ytterligare information eftersom jag kom på en annan intressant upplevelse.

Metadata Döda låsningar kan också inträffa mellan en ddl-operation på en given tabell (drop , alter ...) och ett välj fråga på den tabellen.

Ja, select .

Så, om du loopar över en markör i mysql (eller php, till exempel med pdo::fetch ), och du kör en ddl-sats på samma tabell(er), kommer du att få ett dödläge.

En lösning på detta atypiska scenario är att släppa de implicita låsen med en commit sats systematiskt efter att valfri sats har hämtats helt.



  1. Hur man använder frågedesignern i SQL Server

  2. Paketet har redan lagt upp 50 skålar. Visar inte mer

  3. MySQL - Kan inte skapa vy med SET-variabel inuti

  4. Android :SQLite-fel - (1) nära null:syntaxfel