Impossibile eliminare la tabella poiché viene visualizzato in attesa del blocco dei metadati


11

Stiamo cercando di eliminare una tabella ma si sta impiccando e quando vediamo il comando "SHOW PROCESSLIST", viene visualizzato come "in attesa del blocco dei metadati". Anche noi non siamo in grado di eseguire alcuna operazione su quella particolare tabella. Qualcuno sa come risolverlo?

Risposte:


8

Se si accede a una tabella InnoDB tramite SELECT o DML (INSERT, UPDATE, DELETE), si dovrebbe giustamente aspettarsi un blocco dei metadati.

Secondo la documentazione MySQL sul blocco MetaData :

Per garantire la serializzabilità della transazione, il server non deve consentire a una sessione di eseguire un'istruzione DDL (Data Definition Language) su una tabella utilizzata in una transazione non completata in un'altra sessione. Il server raggiunge questo obiettivo acquisendo blocchi di metadati su tabelle utilizzate all'interno di una transazione e differendo il rilascio di tali blocchi fino al termine della transazione. Un blocco di metadati su una tabella impedisce modifiche alla struttura della tabella. Questo approccio di blocco implica che una tabella utilizzata da una transazione all'interno di una sessione non può essere utilizzata nelle istruzioni DDL da altre sessioni fino al termine della transazione.

Detto questo, è necessario determinare se un'altra sessione DB contiene o meno blocchi nella tabella. Se una sessione del genere è una transazione non completata, è possibile che si verifichi il blocco.

Se hai semplicemente bisogno di ripristinare rapidamente lo spazio su disco, potresti eseguire TRUNCATE TABLE.

SUGGERIMENTO

Prova a rinominare la tabella prima di provare a rilasciarla come segue:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

Il suggerimento non ha funzionato per noi. Invece otteniamo "In attesa del blocco dei metadati della tabella" su ALTER TABLE foorinominafootodrop
Motin

@Motin tutto ciò significa che uno o più DB Connections stavano ancora accedendo alla tabella foo. Una volta che tutte queste connessioni sono state fatte, allora ALTER TABLEpuò procedere.
RolandoMySQLDBA,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.