sql >> Database teknologi >  >> RDS >> Mysql

Nedkastningsbord får MySQL til at hænge

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

Hvis dette er din tabel, kan du se dette link

du har et implicit dødvande. Dræb de andre transaktioner for at frigive drop, eller dræb drop for at frigive de andre transaktioner.

Du kan bruge KILL thread_id, i sql_plus.

Jeg tilføjer yderligere information, da jeg fandt på en anden interessant oplevelse.

Metadata Dead locks kan ligeledes ske mellem en ddl-handling på en given tabel (drop , alter ...) og et vælg forespørgsel på den tabel.

Ja, select .

Så hvis du går over en markør i mysql (eller php, for eksempel med pdo::fetch ), og du kører en ddl-sætning på de samme tabeller, vil du få et dødvande.

En løsning på dette atypiske scenario er at frigive de implicitte låse med en commit sætning systematisk, efter at enhver udvalgt sætning er fuldstændig hentet.



  1. Brug af databaseskemaer i SQL Server

  2. Sådan opretter du en løbende periode i alt

  3. Sådan klynges Odoo 12 med PostgreSQL-streamingreplikering for høj tilgængelighed

  4. SQLite - Opret et forhold