Tenho um pequeno site de produção, mas está no ar 24 horas por dia, 7 dias por semana. Ao executar os comandos Otimizar, Analisar ou Reparar, o MySQL bloqueia a tabela em que está trabalhando.
PERGUNTAS
- Como isso afetaria os usuários tentando fazer alterações em um aplicativo Perl?
- As consultas enfileiradas para o cronograma são bloqueadas e processadas (supondo que o aplicativo não atinja o tempo limite)?
- As consultas simplesmente não funcionam?
Obrigado!
/usman
Como OPTIMIZE TABLE, ANALYZE TABLE e REPAIR TABLE são DDL, são necessários bloqueios de tabela completos.
No entanto, se todos os dados forem InnoDB, a versão mais recente do MySQL é um pouco mais branda com bloqueios DDL. Observe a documentação atual do MySQL em OPTIMIZE TABLE no InnoDB :
Com ANALISAR TABELA
REPAIR TABLE não pede desculpas. A documentação não esclarece as leituras, portanto, os SELECTs seriam totalmente bloqueados até que o reparo fosse concluído.
Todas as consultas que são escritas (INSERT, UPDATE, DELETE) seriam enfileiradas até que esses bloqueios de tabela completos fossem liberados. Isso é verdade independentemente do mecanismo de armazenamento ser InnoDB ou MyISAM.
RESUMO
Bloqueios de leitura atenuam SELECTs dependendo do comando