Temos uma tabela grande em um banco de dados na qual um usuário tentou executar DELETE * FROM table
. Ele ainda estava funcionando no dia seguinte, então encerramos o processo.
Tentei renomear, eliminar e truncar a tabela afetada e até todo o banco de dados, mas qualquer consulta acaba Waiting for table metadata lock
. Posso consultar na tabela.
Todas as informações que encontro sugerem que haverá um processo em algum lugar que ainda está em andamento, mas reiniciei o servidor e o problema persiste.
É um servidor temporário com vários outros bancos de dados, por isso está razoavelmente ocupado, mas não vejo problemas em outros lugares e posso adicionar e descartar outros bancos de dados. É apenas esse banco de dados que parece ter o problema.
Depois de ativar o esquema de desempenho, vejo algumas entradas na performance_schema.metadata_locks
tabela como a seguir:
Não tenho certeza do que se dictionary_impl.cc:434
refere, mas não vejo nada INFORMATION_SCHEMA.PROCESSLIST
relacionado a isso.
As tabelas referenciadas na tabela de bloqueios são todas do banco de dados que estou tentando eliminar.
Eu presumi erroneamente que os bloqueios de metadados não sobreviveriam à reinicialização do servidor. Depois de ler o manual sobre bloqueio de metadados no MySQL8 e confirmar que não havia processos ativos tentando manter um bloqueio na tabela, bastava executar:
Feito isso, consegui executar consultas novamente na tabela e no banco de dados.