Não foi possível descartar a tabela, pois está sendo exibida aguardando o bloqueio de metadados

11

Estamos tentando soltar uma tabela, mas ela está sendo interrompida, e quando vemos o comando 'SHOW PROCESSLIST', ele aparece como 'aguardando o bloqueio de metadados'. Mesmo nós somos incapazes de executar qualquer operação nessa tabela específica. Alguém sabe como resolver isso?

ramya
fonte

Respostas:

8

Se uma tabela do InnoDB estiver sendo acessada via SELECT ou DML (INSERT, UPDATE, DELETE), você deverá esperar, com razão, um bloqueio de metadados.

De acordo com a documentação do MySQL sobre o bloqueio de MetaData :

Para garantir a serialização da transação, o servidor não deve permitir que uma sessão execute uma instrução DDL (Data Definition Language) em uma tabela usada em uma transação incompleta em outra sessão. O servidor consegue isso adquirindo bloqueios de metadados em tabelas usadas em uma transação e adiando a liberação desses bloqueios até o término da transação. Um bloqueio de metadados em uma tabela impede alterações na estrutura da tabela. Essa abordagem de bloqueio implica que uma tabela que está sendo usada por uma transação em uma sessão não pode ser usada em instruções DDL por outras sessões até que a transação termine.

Dito isto, você deve determinar se outra sessão de banco de dados está ou não mantendo bloqueios na tabela. Se essa sessão for uma transação incompleta, é possível que ocorra o atraso.

Se você simplesmente precisar do espaço em disco de volta rapidamente, poderá executar TRUNCATE TABLE.

SUGESTÃO

Tente renomear a tabela antes de tentar descartá-la da seguinte maneira:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
RolandoMySQLDBA
fonte
A sugestão não funcionou para nós. Em vez disso, ficar "em espera para a tabela de bloqueio de metadados" na ALTER TABLE foorenomeaçãofootodrop
Motin
@ Motin, tudo o que isso significa é que um ou mais DB Connections ainda estavam acessando a tabela foo. Depois que todas essas conexões forem feitas, o ALTER TABLEprocedimento poderá prosseguir.
RolandoMySQLDBA