FolioPierEstudos de TI

CHECK TABLE

Nota 31 de 41 · 4 min de leitura
Nesta página
  1. O comando e o resultado
  2. As opções e os engines
  3. O alcance do OK
  4. O efeito na operação
  5. Depois do resultado

Antes de reconstruir ou reparar uma tabela, é preciso reunir evidências de um defeito físico. O CHECK TABLE procura os problemas que o engine consegue verificar, e a leitura correta do resultado mostra o que ele confirma e o que fica fora do seu alcance.

O comando e o resultado

  • CHECK TABLE vendas;: verifica a tabela vendas;
  • CHECK TABLE vendas, itens_venda;: verifica várias tabelas no mesmo comando;
  • mysqlcheck --host=192.168.1.10 --user=root --password loja: verifica, pelo Prompt de Comando, todas as tabelas do banco loja.

O resultado tem uma linha para cada mensagem, com a tabela, a operação, o tipo da mensagem e o texto. O tipo status com o texto OK é o resultado esperado. Os tipos error, warning, note e info trazem detalhes, e todas as linhas precisam ser lidas, porque um erro pode aparecer antes do status final.

As opções e os engines

  • QUICK: não percorre as linhas para conferir as ligações internas. Vale para o InnoDB e para o MyISAM.
  • FAST e CHANGED: verificam apenas as tabelas que não foram fechadas corretamente ou que mudaram desde a última verificação. Valem só para o MyISAM.
  • MEDIUM: confere as linhas e os índices com somas de verificação. É o padrão do MyISAM e vale só para ele.
  • EXTENDED: busca, para cada linha, todas as entradas de índice correspondentes. É a verificação mais completa do MyISAM e também a mais demorada.
  • FOR UPGRADE: verifica se a tabela é compatível com a versão atual do MySQL.

No InnoDB, as opções FAST, CHANGED, MEDIUM e EXTENDED são ignoradas, e acrescentar EXTENDED não torna a verificação mais profunda.

O alcance do OK

O OK indica que a verificação não encontrou os problemas que ela examina. Algumas formas de dano ficam fora do alcance do CHECK TABLE, e o OK não encerra a hipótese física quando há outros sinais, como erros de leitura no log de erros.

O OK também não confere as ligações mantidas pela aplicação, as colunas derivadas nem as condições das ordens. A verificação da tabela de controle das ordens, por exemplo, confirma a estrutura dessa tabela, e não se as linhas dela descrevem as ordens corretamente.

O efeito na operação

  • InnoDB: nas versões atuais, a verificação costuma deixar as gravações seguirem, mas disputa o disco e o processamento com a operação, e, em tabelas grandes, outras conexões podem ficar esperando. Um erro encontrado pode marcar um índice ou a tabela como danificados e impedir o uso deles. Quando encontra uma página danificada, o servidor pode se encerrar de propósito, para impedir que o dano se espalhe.
  • MyISAM: a verificação bloqueia as gravações na tabela enquanto dura, e um erro encontrado deixa a tabela marcada como danificada.

Por isso, a verificação de uma tabela grande ou suspeita acontece em uma janela de manutenção, depois da preservação dos dados.

Depois do resultado

  • OK, com o problema ainda presente: a investigação segue pelas hipóteses lógicas, sem abandonar outros sinais físicos.
  • Erro em uma tabela InnoDB: o caminho é a reconstrução da tabela ou a restauração de uma cópia, depois da preservação do que ainda pode ser lido.
  • Erro em uma tabela MyISAM: o caminho é o reparo da tabela, depois da cópia dos arquivos.

No suporte

Convém registrar o resultado completo do CHECK TABLE junto com o engine e a versão do MySQL. A frase “o CHECK TABLE não encontrou erro” descreve o resultado com precisão, e a análise dos logs e do SQL real continua. Uma evidência de dano continua valendo mesmo depois de um OK.

Para guardar

  • O CHECK TABLE procura os defeitos físicos que o engine consegue verificar.
  • O resultado esperado é o status OK, e todas as linhas da saída precisam ser lidas.
  • As opções FAST, CHANGED, MEDIUM e EXTENDED valem só para o MyISAM.
  • O OK não elimina todo dano possível nem confere as regras da aplicação.
  • No MyISAM, a verificação bloqueia as gravações, e no InnoDB uma página danificada pode encerrar o servidor.
Por que planejar o CHECK TABLE para uma janela de manutenção, se ele apenas verifica?

Porque a verificação disputa recursos com a operação, bloqueia as gravações em tabelas MyISAM e, no InnoDB, pode encerrar o servidor ao encontrar uma página danificada. A janela e a preservação anterior limitam o impacto e mantêm um caminho de recuperação.

O comando CHECK TABLE vendas EXTENDED retornou OK em uma tabela InnoDB. A verificação foi mais completa que a comum?

Não. O InnoDB ignora a opção EXTENDED, e o resultado tem o mesmo alcance da verificação comum. Ele precisa ser combinado com as outras evidências, sem a conclusão de que todo dano possível foi descartado.

Publicado a partir do Obsidian · FolioPier