Estou executando o Mysql 8 com tabelas InnoDB. Tenho uma tabela com 100 mil linhas pequenas que está sob uso pesado (10-50 consultas por segundo).
Quero trocar a tabela com sua versão mais recente, usando RENAME table TO old_table, replacement_table TO table
. O que acontece com as consultas em execução? Elas travam ou terminam graciosamente? As novas consultas esperam a renomeação terminar ou podem usar a nova versão da tabela, enquanto as consultas existentes são concluídas com a antiga?
Em geral, é uma abordagem OK para atualizar uma tabela? Eu precisaria comparar cada linha para alterações, caso contrário, procurar por linhas novas e excluídas, então trocar uma tabela como essa parece ser bem mais simples.
Obrigado
A
RENAME
declaração precisa adquirir um bloqueio de metadados na(s) tabela(s) que está(ão) sendo renomeada(s), e o mesmo acontece com as declarações DML. Como resultado, oRENAME
aguardará sua vez de obter o bloqueio de metadados, o que só é possível quando não há declarações DML em execução referenciando esta tabela, e enquanto ele estiver executando e mantendo o bloqueio, outras declarações aguardarão. Em outras palavras, declarações em andamento serão concluídas antes deRENAME
starts, e outras declarações aguardarão até queRENAME
completes.Referência