sql >> Database >  >> RDS >> Mysql

Door de tafel te laten vallen blijft MySQL hangen

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

Als dit jouw tabel is, bekijk dan deze link

je hebt een impliciete patstelling. Dood de andere transacties om de druppel vrij te geven, of stop de druppel om de andere transacties vrij te geven.

U kunt KILL gebruiken thread_id, in sql_plus.

Ik voeg meer informatie toe omdat ik een andere interessante ervaring heb bedacht.

Metadata Dead locks kunnen evengoed optreden tussen een ddl-bewerking op een bepaalde tafel (drop , alter ...) en een select vraag op die tafel.

Ja, select .

Dus als je een cursor in mysql (of php, bijvoorbeeld met pdo::fetch ), en je voert een ddl-statement uit op dezelfde tafel(s), dan krijg je een deadlock.

Een oplossing voor dit atypische scenario is om de impliciete vergrendelingen vrij te geven met een commit statement systematisch nadat een select statement volledig is opgehaald.



  1. Oracle Unicode-spooling

  2. Mysql - jaar selecteren uit een Unix-tijdstempel

  3. Hoe te selecteren totdat een bedrag is bereikt

  4. Waarom verbetert STRAIGHT_JOIN deze zoekopdracht zo drastisch, en wat betekent het als het achter het SELECT-sleutelwoord wordt geschreven?