Comandos Linux – Comando myisamchk

Comando Linux myisamchk

comando myisamchk

Em sistemas operacionais do tipo Unix executando o MySQL , o utilitário myisamchk obtém informações sobre suas tabelas de banco de dados MySQL e as verifica, repara ou as otimiza.

O comando myisamchk funciona com tabelas MyISAM (tabelas que possuem arquivos .MYD e .MYI para armazenar dados e índices).

Descrição

As opções especificam o que você deseja que o myisamchk faça. Eles são descritos nas seguintes seções. Você também pode obter uma lista de opções executando myisamchk –help .

NotaÉ melhor fazer um backup de uma tabela antes de executar uma operação de reparo de tabela; sob algumas circunstâncias, a operação pode causar perda de dados. As possíveis causas incluem, entre outros , erros no sistema de arquivos .

Sem opções, myisamchk verifica sua tabela como a operação padrão. Para obter mais informações ou dizer ao myisamchk para tomar uma ação corretiva, especifique as opções apropriadas.

nome_tabela é a tabela do banco de dados que você deseja verificar ou reparar. Se você executar o myisamchk em outro lugar que não seja o diretório do banco de dados, deverá especificar o caminho para o diretório do banco de dados, porque o myisamchk não tem idéia de onde o banco de dados está localizado. De fato, o myisamchk não se importa se os arquivos em que você está trabalhando estão localizados em um diretório de banco de dados. Você pode copiar os arquivos que correspondem a uma tabela de banco de dados em outro local e executar operações de recuperação neles.

Você pode nomear várias tabelas na linha de comando myisamchk , se desejar. Você também pode especificar uma tabela nomeando seu arquivo de índice (o arquivo com o sufixo .MYI). Isso permite que você especifique todas as tabelas em um diretório usando o padrão * .MYI. Por exemplo, se você estiver em um diretório de banco de dados, poderá verificar todas as tabelas MyISAM nesse diretório assim:

  myisamchk * .MYI

Se você não estiver no diretório do banco de dados, poderá verificar todas as tabelas especificando o caminho para o diretório:

  myisamchk /path/to/database_dir/*.MYI

Você pode até verificar todas as tabelas em todos os bancos de dados especificando um curinga com o caminho para o diretório de dados do MySQL:

  myisamchk /path/to/datadir/*/*.MYI

A maneira recomendada de verificar rapidamente todas as tabelas MyISAM é:

  myisamchk --silent --fast /path/to/datadir/*/*.MYI

Se você deseja verificar todas as tabelas MyISAM e reparar as que estão corrompidas, pode usar o seguinte comando:

  myisamchk --silent --force --fast --update-state 
           --key_buffer_size = 64M --myisam_sort_buffer_size = 64M 
           --read_buffer_size = 1M --write_buffer_size = 1M 
           /path/to/datadir/*/*.MYI

Este comando supõe que você tenha mais de 64 MB livres. Para obter mais informações sobre alocação de memória com myisamchk , consulte a seção “USO DA MEMÓRIA MYISAMCHK”.

Para obter informações adicionais sobre o uso do myisamchk , consulte a Seção 7.6, “Manutenção da tabela MyISAM e recuperação de falhas”.

Importante: Você deve garantir que nenhum outro programa esteja usando as tabelas enquanto estiver executando o myisamchk . O meio mais eficaz de fazer isso é desligar o servidor MySQL enquanto executa o myisamchk ou bloquear todas as tabelas em que o myisamchk está sendo usado.

Caso contrário, quando você executa o myisamchk , ele pode exibir a seguinte mensagem de erro:

  aviso: os clientes estão usando ou não fecharam a tabela corretamente

Este erro significa que você está tentando verificar uma tabela que foi atualizada por outro programa (como o servidor mysqld ) que ainda não fechou o arquivo ou que morreu sem fechar o arquivo corretamente, o que às vezes pode levar à corrupção de uma ou mais tabelas MyISAM.

Se o mysqld estiver em execução, você deve forçá-lo a liberar quaisquer modificações de tabela que ainda estejam armazenadas em buffer na memória usando FLUSH TABLES. Você deve garantir que ninguém esteja usando as tabelas enquanto estiver executando o myisamchk . No entanto, a maneira mais fácil de evitar esse problema é usar CHECK TABLE em vez de myisamchk para verificar tabelas.

Sintaxe

  myisamchk [ opções ] nome_tabela ...

Opções

As opções descritas nesta seção podem ser usadas para qualquer operação de manutenção de tabela executada pelo myisamchk . As seções a seguir descrevem opções que pertencem apenas a operações específicas, como verificação ou reparo de tabela.

–Socorro, -? Exiba uma mensagem de ajuda e saia. As opções são agrupadas por tipo de operação.
–HELP, -H Exiba uma mensagem de ajuda e saia. As opções são apresentadas em uma única lista.
–debug = opções de depuração, – # opções de depuração Escreva um log de depuração . Uma string típica de debug_options é ‘ d: t: o, file_name ‘. O padrão é ‘ d: t: o, / tmp / myisamchk.trace ‘.
–silenciosos Modo silencioso. Grave a saída somente quando ocorrerem erros. Você pode usar -s duas vezes ( -ss ) para deixar o myisamchk muito silencioso.
–verbose, -v Modo verboso . Imprima mais informações sobre o que o programa faz. Isso pode ser usado com -d e -e . Use -v várias vezes ( -vv , -vvv ) para obter ainda mais resultados.
–version, -V Exibir informações da versão e sair.
–wait, -w Em vez de terminar com um erro se a tabela estiver bloqueada, aguarde até que a tabela seja desbloqueada antes de continuar. Se você estiver executando o mysqld com o bloqueio externo desativado, a tabela poderá ser bloqueada apenas por outro comando myisamchk .

Você também pode definir as seguintes variáveis usando a sintaxe –var_name = value:

variável valor padrão
decode_bits 9
ft_max_word_len dependente da versão
ft_min_word_len 4
ft_stopword_file lista embutida
key_buffer_size 523264
myisam_block_size 1024
myisam_sort_key_blocks 16
read_buffer_size 262136
sort_buffer_size 2097144
sort_key_blocks 16
stats_method nulls_unequal
write_buffer_size 262136

As possíveis variáveis myisamchk e seus valores padrão podem ser examinados com myisamchk –help :

sort_buffer_size é usado quando as chaves são reparadas pela classificação das chaves, que é o caso normal quando você usa –recover . A partir do MySQL 5.5.29, myisam_sort_buffer_size está disponível como um nome alternativo ao sort_buffer_size . myisam_sort_buffer_size é preferível a sort_buffer_size porque seu nome corresponde à variável de sistema do servidor myisam_sort_buffer_size que possui um significado semelhante. sort_buffer_size deve ser considerado reprovado.

key_buffer_size é usado quando você está verificando a tabela com –extend-check ou quando as chaves são reparadas inserindo chaves linha por linha na tabela (como ao fazer inserções normais). O reparo através do buffer de chave é usado nos seguintes casos:

  • Você usa –safe-recover .
  • Os arquivos temporários necessários para classificar as chaves teriam mais que o dobro do tamanho da criação direta do arquivo de chaves. Geralmente, esse é o caso quando você tem grandes valores de chave para as colunas CHAR , VARCHAR ou TEXT , porque a operação de classificação precisa armazenar os valores completos da chave à medida que prossegue. Se você tiver muito espaço temporário e forçar o reparo do myisamchk classificando, poderá usar a opção –sort-recover .

O reparo através do buffer de chave ocupa muito menos espaço em disco do que a classificação, mas também é muito mais lento.

Se você deseja um reparo mais rápido, configure as variáveis key_buffer_size e myisam_sort_buffer_size para cerca de 25% da memória disponível. Você pode definir as duas variáveis ​​para valores grandes, porque apenas uma delas é usada por vez.

myisam_block_size é o tamanho usado para os blocos de índice.

O stats_method influencia como os valores NULL são tratados para a coleta de estatísticas do índice quando a opção –analyze é fornecida. Ele age como a variável de sistema myisam_stats_method .

ft_min_word_len e ft_max_word_len indicam o comprimento mínimo e máximo da palavra para índices FULLTEXT. ft_stopword_file nomeia o arquivo de stopword. Eles precisam ser definidos nas seguintes circunstâncias:

Se você usar o myisamchk para executar uma operação que modifique os índices da tabela (como reparar ou analisar), os índices FULLTEXT serão reconstruídos usando os valores de parâmetro de texto completo padrão para o comprimento mínimo e máximo da palavra e o arquivo de palavras de parada, a menos que você especifique o contrário. Isso pode resultar em falhas nas consultas .

O problema ocorre porque esses parâmetros são conhecidos apenas pelo servidor. Eles não são armazenados nos arquivos de índice MyISAM. Para evitar o problema se você modificou o tamanho mínimo ou máximo da palavra ou o arquivo de palavras de parada no servidor, especifique os mesmos valores de ft_min_word_len , ft_max_word_len e ft_stopword_file para myisamchk que você usa para o mysqld . Por exemplo, se você tiver definido o tamanho mínimo da palavra como 3 , poderá reparar uma tabela com o myisamchk assim:

  myisamchk --recover --ft_min_word_len = 3 nome_tabela.MYI

Para garantir que o myisamchk e o servidor usem os mesmos valores para parâmetros de texto completo, você pode colocar cada um nas seções [mysqld] e [myisamchk] de um arquivo de opções:

  [mysqld]
 ft_min_word_len = 3
 [myisamchk]
 ft_min_word_len = 3

Uma alternativa ao uso do myisamchk é usar a REPAIR TABLE , ANALYZE TABLE , OPTIMIZE TABLE ou ALTER TABLE . Essas instruções são executadas pelo servidor, que conhece os valores adequados dos parâmetros de texto completo a serem usados.

Opções de “Verificar”

O myisamchk suporta as seguintes opções para operações de verificação de tabela:

–check, -c Verifique a tabela quanto a erros. Esta é a operação padrão se você não especificar nenhuma opção que selecione explicitamente um tipo de operação.
– verifique somente a alteração, -C Verifique apenas as tabelas que foram alteradas desde a última verificação.
–extend-check, -e Verifique a tabela com muita atenção. Isso é bastante lento se a tabela tiver muitos índices. Esta opção deve ser usada apenas em casos extremos. Normalmente, myisamchk ou myisamchk –medium-check devem poder determinar se há algum erro na tabela.

Se você estiver usando –extend-check e tiver bastante memória, definir a variável key_buffer_size como um valor grande ajuda a operação de reparo a executar mais rapidamente.

Consulte também a descrição desta opção em opções de reparo de tabela.

Para uma descrição do formato de saída, consulte a seção “OBTENDO INFORMAÇÕES DA TABELA COM MYISAMCHK”.

–fast, -F Verifique apenas as tabelas que não foram fechadas corretamente.
–force, -f Execute uma operação de reparo automaticamente se myisamchk encontrar algum erro na tabela. O tipo de reparo é o mesmo especificado com a opção –recover ou -r .
–informações, -i Imprima estatísticas informativas sobre a tabela que está marcada.
– verificação do meio, -m Faça uma verificação mais rápida que uma operação –extend-check . Isso encontra apenas 99,99% de todos os erros, o que deve ser bom o suficiente na maioria dos casos.
– somente leitura, -T Não marque a tabela como marcada. Isso é útil se você usar o myisamchk para verificar uma tabela que está sendo usada por algum outro aplicativo que não use o bloqueio, como o mysqld, quando executado com o bloqueio externo desativado.
–update-state, -U Armazene informações no arquivo .MYI para indicar quando a tabela foi verificada e se a tabela falhou. Isso deve ser usado para obter todos os benefícios da opção –check-only-alterado , mas você não deve usar esta opção se o servidor mysqld estiver usando a tabela e você estiver executando-o com o bloqueio externo desativado.

Opções de “Reparação”

O myisamchk suporta as seguintes opções para operações de reparo de tabela (operações executadas quando uma opção como –recover ou –safe-recover é fornecida):

–backup, -B Faça um backup do arquivo .MYD como file_name-time.BAK .
–character-sets-dir = caminho O diretório em que os conjuntos de caracteres estão instalados.
–comação de verificação correta Corrija as informações da soma de verificação para a tabela.
–data-arquivo-comprimento = len ,
-D len
O comprimento máximo do arquivo de dados (ao recriar o arquivo de dados quando está “cheio”).
–extend-check, -e Faça um reparo que tente recuperar todas as linhas possíveis do arquivo de dados. Normalmente, isso também encontra muitas linhas de lixo. Não use esta opção, a menos que esteja desesperado. Consulte também a descrição desta opção em opções de verificação de tabela. Para obter uma descrição do formato de saída, consulte a seção chamada OBTENDO INFORMAÇÕES DA TABELA COM MYISAMCHK.
–force, -f Substitua os arquivos intermediários antigos (arquivos com nomes como tbl_name.TMD ) em vez de abortar.
–chaves utilizadas = val
-k val
Para myisamchk , o valor da opção é um valor de bit que indica quais índices atualizar. Cada bit binário do valor da opção corresponde a um índice da tabela, onde o primeiro índice é o bit 0. Um valor da opção 0 desativa atualizações para todos os índices, que podem ser usados ​​para obter inserções mais rápidas. Índices desativados podem ser reativados usando myisamchk -r .
–no-symlinks, -l Não siga os links simbólicos . Normalmente, o myisamchk repara a tabela para a qual um link simbólico aponta. Esta opção não existe no MySQL 4.0 porque as versões do 4.0 em diante não removem links simbólicos durante as operações de reparo.
–max-record-length = len Pule linhas maiores que o comprimento especificado se myisamchk não puder alocar memória para mantê-las.
–parallel-recover, -p Use a mesma técnica que -r e -n , mas crie todas as chaves em paralelo, usando threads diferentes. Este é um código de qualidade beta. Use por sua conta e risco!
–quick, -q Obtenha um reparo mais rápido modificando apenas o arquivo de índice, não o arquivo de dados. Você pode especificar esta opção duas vezes para forçar o myisamchk a modificar o arquivo de dados original no caso de chaves duplicadas.
–recover, -r Faça um reparo que possa corrigir quase qualquer problema, exceto chaves exclusivas que não são exclusivas (que é um erro extremamente improvável nas tabelas MyISAM). Se você deseja recuperar uma tabela, esta é a opção para tentar primeiro. Você deve tentar –safe-recover apenas se myisamchk relatar que a tabela não pode ser recuperada usando –recover . No caso improvável de –recover falhar, o arquivo de dados permanece intacto. Se você tiver muita memória, deve aumentar o valor de myisam_sort_buffer_size .
–safe-recover, -o Faça um reparo usando um método de recuperação antigo que leia todas as linhas em ordem e atualize todas as árvores de índice com base nas linhas encontradas. Essa é uma ordem de magnitude mais lenta que –recover , mas pode lidar com alguns casos muito improváveis ​​que –recover não podem. Esse método de recuperação também usa muito menos espaço em disco que –recover . Normalmente, você deve reparar primeiro usando –recover e, em seguida, com –safe-recover somente se –recover falhar.

Se você tem muita memória, deve aumentar o valor de key_buffer_size .

–set-character-set = name Altere o conjunto de caracteres usado pelos índices da tabela. Esta opção foi substituída por –set-collation no MySQL 5.0.3.
–set-collation = nome Especifique o agrupamento a ser usado para classificar os índices da tabela. O nome do conjunto de caracteres está implícito na primeira parte do nome do agrupamento.
–sort-recover, -n Force o myisamchk a usar a classificação para resolver as chaves, mesmo que os arquivos temporários sejam muito grandes.
–tmpdir = caminho , -t caminho O caminho do diretório a ser usado para armazenar arquivos temporários. Se isso não estiver definido, myisamchk utilizará o valor da variável de ambiente TMPDIR . –tmpdir pode ser definido como uma lista de caminhos de diretório que são usados ​​sucessivamente de maneira round-robin para criar arquivos temporários. O caractere separador entre os nomes dos diretórios é dois pontos (” : “) no Unix e o ponto e vírgula (” ; “) no Windows.
–unpack, -u Desembale uma mesa que estava cheia de myisampack.

Outras opções

O myisamchk suporta as seguintes opções para ações que não sejam verificações e reparos de tabela:

–analise, -a Analise a distribuição dos valores-chave. Isso melhora o desempenho da junção, permitindo que o otimizador de junção escolha melhor a ordem na qual ingressar nas tabelas e quais índices ele deve usar. Para obter informações sobre a distribuição de chaves, use o comando myisamchk –description –verbose tbl_name ou a instrução SHOW INDEX FROM tbl_name .
–block-search = offset ,
-b offset
Encontre o registro ao qual pertence um bloco no deslocamento especificado.
–description, -d Imprima algumas informações descritivas sobre a tabela. Especificar a opção –verbose uma ou duas vezes produz informações adicionais. Veja a seção OBTENDO INFORMAÇÕES DA TABELA COM MYISAMCHK.
–set-auto-incremento [ = valor ] , -A [ valor ] Force a numeração AUTO_INCREMENT para que novos registros iniciem no valor especificado (ou superior, se houver registros existentes com valores AUTO_INCREMENT tão grandes). Se o valor não for especificado, os números AUTO_INCREMENT para novos registros começam com o maior valor atualmente na tabela, mais um.
–sort-index, -S Classifique os blocos da árvore de índice em ordem alta-baixa. Isso otimiza as buscas e faz as verificações de tabela que usam índices mais rapidamente.
–sort-records = N , -R N Classifique os registros de acordo com um índice específico. Isso torna seus dados muito mais localizados e pode acelerar as operações SELECT e ORDER BY baseadas em intervalo que usam esse índice. A primeira vez que você usa essa opção para classificar uma tabela, ela pode ser muito lenta. Para determinar os números de índice de uma tabela, use SHOW INDEX , que exibe os índices de uma tabela na mesma ordem em que myisamchk os vê. Os índices são numerados começando com 1.

Se as chaves não estiverem compactadas (PACK_KEYS = 0), elas terão o mesmo comprimento; portanto, quando myisamchk classifica e move registros, ele substitui as compensações de registro no índice. Se as chaves estiverem compactadas (PACK_KEYS = 1), o myisamchk deverá descompactar os blocos de chaves primeiro, depois recrie os índices e empacote os blocos de chaves novamente. Nesse caso, a recriação de índices é mais rápida que a atualização de compensações para cada índice.

Obtendo informações da tabela

Para obter uma descrição de uma tabela MyISAM ou estatísticas sobre ela, use os comandos mostrados aqui. A saída desses comandos é explicada mais adiante nesta seção.

-d nome_tabela Executa o myisamchk no “modo de descrição” para produzir uma descrição da sua tabela. Se você iniciar o servidor MySQL com o bloqueio externo desativado, o myisamchk poderá relatar um erro para uma tabela que é atualizada enquanto é executada. No entanto, como o myisamchk não altera a tabela no modo de descrição, não há risco de destruir dados.
-dv tbl_name A adição de -v executa o myisamchk no modo detalhado para que produza mais informações sobre a tabela. Adicionar -v uma segunda vez produz ainda mais informações.
-eis nome_tabela Mostra apenas as informações mais importantes de uma tabela. Esta operação é lenta porque deve ler a tabela inteira.
-eiv nome_tabela É como -eis , mas diz o que está sendo feito.

O argumento tbl_name pode ser o nome de uma tabela MyISAM ou o nome de seu arquivo de índice. Vários argumentos tbl_name podem ser fornecidos.

Suponha que uma tabela chamada pessoa tenha a seguinte estrutura. opção de tabela MAX_ROWS está incluída para que, no exemplo de saída do myisamchk mostrado posteriormente, alguns valores sejam menores e ajustem o formato de saída mais facilmente.

  CRIAR TABELA pessoa
 (
   id INT NÃO NULL AUTO_INCREMENT,
   last_name VARCHAR (20) NÃO NULL,
   first_name VARCHAR (20) NÃO NULL,
   data de nascimento,
   data de óbito,
   CHAVE PRIMÁRIA (id),
   INDEX (sobrenome, nome),
   ÍNDICE (nascimento)
 ) MAX_ROWS = 1000000;

Suponha também que a tabela tenha esses dados e tamanhos de arquivo de índice:

  -rw-rw ---- 1 mysql mysql 9347072 Ago 19 11:47 person.MYD
 -rw-rw ---- 1 mysql mysql 6066176 Ago 19 11:47 person.MYI

Exemplo de saída myisamchk -dvv :

  Arquivo MyISAM: person
 Formato de gravação: embalado
 Conjunto de caracteres: latin1_swedish_ci (8)
 Versão do arquivo: 1
 Tempo de criação: 2009-08-19 16:47:41
 Tempo de recuperação: 19/08/2009 16:47:56
 Status: chaves verificadas, analisadas e otimizadas
 Chave de incremento automático: 1 Último valor: 306688
 Registros de dados: 306688 Blocos excluídos: 0
 Peças do arquivo de dados: 306688 Dados excluídos: 0
 Ponteiro do arquivo de dados (bytes): 4 Ponteiro do arquivo de chave (bytes): 3
 Comprimento do arquivo de dados: 9347072 Comprimento do arquivo de chaves: 6066176
 Comprimento máximo do arquivo de dados: 4294967294 Comprimento máximo do arquivo de chave: 17179868159
 Comprimento do registro: 54
 descrição da tabela:
 Key Start Len Tipo de índice Rec / key Rootize Blocksize
 1 2 4 único longo 1 99328 1024
 2 6 20 multip.  prefixo varchar 512 3563520 1024
 27 20 varchar 512
 3 48 3 multip.  uint24 NULL 306688 6065152 1024
 Comprimento de início do campo Nullpos Tipo de Nullbit
 1 1 1
 2 2 4 sem zeros
 3 6 21 varchar
 4 27 21 varchar
 5 48 3 1 1 sem zeros
 6 51 3 1 2 sem zeros

Explicações para os tipos de informações produzidas pelo myisamchk são fornecidas aqui. “Keyfile” refere-se ao arquivo de índice. “Registro” e “linha” são sinônimos, assim como “campo” e “coluna”.

A parte inicial da descrição da tabela contém estes valores:

Arquivo MyISAM Nome do arquivo MyISAM (index).
Formato de gravação O formato usado para armazenar linhas da tabela. Os exemplos anteriores usam Comprimento fixo. Outros valores possíveis são compactados e compactados. Empacotado corresponde ao que SHOW TABLE STATUS informa como dinâmico.
Conjunto de Chararacter O conjunto de caracteres padrão da tabela.
Versão do arquivo Versão do formato MyISAM. Atualmente sempre 1.
Tempo de criação Quando o arquivo de dados foi criado.
Recuperar tempo Quando o arquivo de índice / dados foi reconstruído pela última vez.
Status Sinalizadores de status da tabela. Os valores possíveis são travados, abertos, alterados, analisados, chaves otimizadas e páginas de índice classificadas.
Chave de incremento automático, Último valor O número da chave associado à coluna AUTO_INCREMENT da tabela e o valor gerado mais recentemente para esta coluna. Esses campos não aparecem se não houver essa coluna.
Registros de dados O número de linhas na tabela.
Blocos excluídos Quantos blocos excluídos ainda têm espaço reservado. Você pode otimizar sua tabela para minimizar esse espaço. Consulte a Seção 7.6.4, “Otimização de tabela MyISAM”.
Partes do arquivo de dados Para o formato de linha dinâmica, isso indica quantos blocos de dados existem. Para uma tabela otimizada sem linhas fragmentadas, é o mesmo que registros de dados.
Dados excluídos Quantos bytes de dados excluídos não recuperados existem. Você pode otimizar sua tabela para minimizar esse espaço.
Ponteiro de arquivo de dados O tamanho do ponteiro do arquivo de dados, em bytes. Geralmente, são 2 , 3 , 4 ou 5 bytes. A maioria das tabelas gerencia com 2 bytes, mas isso ainda não pode ser controlado pelo MySQL. Para tabelas fixas, este é um endereço de linha. Para tabelas dinâmicas, este é um endereço de bytes.
Ponteiro de arquivo de chave O tamanho do ponteiro do arquivo de índice, em bytes. Geralmente é de 1 , 2 ou 3 bytes. A maioria das tabelas gerencia com 2 bytes, mas isso é calculado automaticamente pelo MySQL. É sempre um endereço de bloco.
Comprimento máximo do arquivo de dados Quanto tempo o arquivo de dados da tabela pode se tornar, em bytes.
Comprimento máximo do arquivo-chave Quanto tempo o arquivo de índice da tabela pode se tornar, em bytes.
Comprimento do registro Quanto espaço cada linha ocupa, em bytes.

A parte da descrição da tabela da saída inclui uma lista de todas as chaves na tabela. Para cada chave, o myisamchk exibe algumas informações de baixo nível:

Chave O número desta chave. Este valor é mostrado apenas para a primeira coluna da chave. Se esse valor estiver ausente, a linha corresponderá à segunda ou mais tarde coluna de uma chave de várias colunas. Para a tabela mostrada no exemplo, existem duas linhas de descrição da tabela para o segundo índice. Isso indica que é um índice de várias partes com duas partes.
Começar Onde na linha essa parte do índice começa.
Len Quanto tempo essa parte do índice é. Para números compactados, esse deve sempre ser o comprimento total da coluna. Para cadeias, pode ser menor que o comprimento total da coluna indexada, porque você pode indexar um prefixo de uma coluna de cadeias. O comprimento total de uma chave de várias partes é a soma dos valores Len para todas as partes da chave.
Índice Se um valor de chave pode existir várias vezes no índice. Os valores possíveis são únicos ou multiponto . (múltiplo).
Tipo Que tipo de dados esta parte do índice possui. Este é um tipo de dados MyISAM com os possíveis valores compactados, removidos ou vazios.
Raiz Endereço do bloco de índice raiz.
Tamanho do bloco O tamanho de cada bloco de índice. Por padrão, isso é 1024 , mas o valor pode ser alterado no momento da compilação quando o MySQL é criado a partir da fonte.
Gravação / tecla Este é um valor estatístico usado pelo otimizador. Ele informa quantas linhas existem por valor para este índice. Um índice exclusivo sempre tem o valor 1. Isso pode ser atualizado depois que uma tabela é carregada (ou muito alterada) com myisamchk -a . Se isso não for atualizado, será fornecido um valor padrão 30 .

A última parte da saída fornece informações sobre cada coluna:

Campo O número da coluna.
Começar A posição de bytes da coluna nas linhas da tabela.
comprimento O comprimento da coluna em bytes.
Nullpos, Nullbit Para colunas que podem ser NULL , o MyISAM armazena valores NULL como um sinalizador em um byte. Dependendo de quantas colunas anuláveis ​​existem, pode haver um ou mais bytes usados ​​para esse fim. Os valores Nullpos e Nullbit , se não estiverem vazios, indicam qual byte e bit contém esse sinalizador indicando se a coluna é NULL.

A posição e o número de bytes usados ​​para armazenar sinalizadores NULL são mostrados na linha do campo 1. É por isso que existem seis linhas de campo para a tabela de pessoas, mesmo que possua apenas cinco colunas.

Tipo O tipo de dados. O valor pode conter qualquer um dos seguintes descritores:

constante

Todas as linhas têm o mesmo valor.

sem espaço no fim

Não armazene espaço na extremidade.

sem espaço para extremidade, não sempre

Não armazene o espaço no final e não faça a compactação no espaço para todos os valores.

sem espaço no fim, sem vazio

Não armazene espaço na extremidade. Não armazene valores vazios.

pesquisa de tabela

A coluna foi convertida em um ENUM.

zerofill (N)

Os N bytes mais significativos no valor são sempre 0 e não são armazenados.

sem zeros

Não guarde zeros.

sempre zero

Os valores zero são armazenados usando um bit.

Árvore Huff O número da árvore Huffman associada à coluna.
Bits O número de bits usados ​​na árvore Huffman.

Os campos Árvore Huff e Bits são exibidos se a tabela tiver sido compactada com myisampack . Veja myisampack , para um exemplo desta informação. Exemplo de saída myisamchk -eiv :

  Verificando o arquivo MyISAM: person
 Registros de dados: 306688 Blocos excluídos: 0
 - verifique o tamanho do arquivo
 - verificar registro excluir cadeia
 Nenhum link de registro
 - verifique a cadeia de exclusão de chaves
 block_size 1024:
 - verifique a referência do índice
 - verifique o índice de referências do registro de dados: 1
 Chave: 1: Blocos de teclas usados: 98% Embalados: 0% Níveis máximos: 3
 - verifique o índice de referências do registro de dados: 2
 Chave: 2: Blocos de teclas usados: 99% Embalados: 97% Níveis máximos: 3
 - verifique o índice de referências do registro de dados: 3
 Chave: 3: Blocos de teclas usados: 98% Embalado: -14% Níveis máximos: 3
 Total: Keyblocks usados: 98% Embalados: 89%
 - verifique registros e referências de índice *** MUITOS NÚMEROS DE LINHA EXCLUÍDOS ***
 Registros: 306688 M.recordlength: 25 Embalado: 83%
 Espaço de registro usado: 97% Espaço vazio: 2% Blocos / registro: 1.00
 Blocos de registro: 306688 Excluir blocos: 0
 Dados do registro: 7934464 Dados excluídos: 0
 Espaço perdido: 256512 Linkdata: 1156096
 Hora do usuário 43.08, Hora do sistema 1,68
 Tamanho máximo do conjunto de residentes 0, Tamanho integral do conjunto de residentes 0
 Erros de página não físicos 0, Erros de página físicos 0, Trocas 0
 Bloqueia 0 em 7, Mensagens 0 em 0, Sinais 0
 Alternativas de contexto voluntárias 0, Alternativas de contexto involuntárias 0
 Uso máximo de memória: 1046926 bytes (1023k)

A saída myisamchk -eiv inclui as seguintes informações:

Registros de dados O número de linhas na tabela.
Blocos excluídos Quantos blocos excluídos ainda têm espaço reservado. Você pode otimizar sua tabela para minimizar esse espaço.
Chave O número da chave.
Keyblocks usados Qual a porcentagem dos bloqueios de teclas usados. Quando uma tabela acaba de ser reorganizada com myisamchk , os valores são muito altos (muito próximo do máximo teórico).
Embalado O MySQL tenta compactar valores-chave que possuem um sufixo comum. Isso pode ser usado apenas para índices nas colunas CHAR e VARCHAR . Para seqüências longas indexadas que possuem partes semelhantes à esquerda, isso pode reduzir significativamente o espaço usado. No exemplo anterior, a segunda chave tem 40 bytes de comprimento e é alcançada uma redução de 97% no espaço.
Níveis máximos Qual a profundidade da árvore B para essa chave. Tabelas grandes com valores de chave longos obtêm valores altos.
Registros Quantas linhas estão na tabela.
M.recordlength O comprimento médio da linha. Esse é o comprimento exato da linha para tabelas com linhas de comprimento fixo, porque todas as linhas têm o mesmo comprimento.
Embalado O MySQL retira espaços do final das strings. O valor Empacotado indica a porcentagem de economia alcançada ao fazer isso.
Espaço de registros usado Qual porcentagem do arquivo de dados é usada.
Espaço vazio Qual porcentagem do arquivo de dados não é usada.
Blocos / Registro Número médio de blocos por linha (ou seja, quantos links uma linha fragmentada é composta). Isso sempre é 1.0 para tabelas de formato fixo. Este valor deve permanecer o mais próximo possível de 1,0. Se ficar muito grande, você pode reorganizar a tabela.
Recordblocks Quantos blocos (links) são usados. Para tabelas de formato fixo, é igual ao número de linhas.
Deleteblocks Quantos blocos (links) são excluídos.
Dados de registro Quantos bytes no arquivo de dados são usados.
Dados excluídos Quantos bytes no arquivo de dados são excluídos (não utilizados).
Espaço perdido Se uma linha for atualizada para um comprimento menor, algum espaço será perdido. Esta é a soma de todas essas perdas, em bytes.
Linkdata Quando o formato da tabela dinâmica é usado, os fragmentos de linha são vinculados aos ponteiros (4 a 7 bytes cada). Linkdata é a soma da quantidade de armazenamento usada por todos esses indicadores.

Uso de memória

A maneira como você aloca memória é importante ao executar o myisamchk .

myisamchk não usa mais memória do que suas variáveis ​​relacionadas à memória estão definidas. Se você usar o myisamchk em tabelas muito grandes, primeiro decida quanta memória deseja que ele use. O padrão é usar apenas cerca de 3 MB para executar reparos, mas usando valores maiores, é possível fazer com que o myisamchk opere mais rapidamente. Por exemplo, se você tiver mais de 512 MB de RAM disponível, poderá usar opções como estas (além de outras opções que possa especificar):

  shell> myisamchk --myisam_sort_buffer_size = 256M \
            --key_buffer_size = 512M \
            --read_buffer_size = 64M \
            --write_buffer_size = 64M ...

Usar –myisam_sort_buffer_size = 16M provavelmente é suficiente para a maioria dos casos.

Esteja ciente de que o myisamchk usa arquivos temporários no diretório especificado pela variável de ambiente TMPDIR . Se o TMPDIR apontar para um sistema de arquivos da memória, erros de falta de memória podem ocorrer facilmente. Se isso acontecer, execute myisamchk com a opção –tmpdir = path para especificar um diretório localizado em um sistema de arquivos que tenha mais espaço. Ao executar operações de reparo, o myisamchk também precisa de muito espaço em disco:

  • O dobro do tamanho do arquivo de dados (o arquivo original e uma cópia). Este espaço não é necessário se você fizer um reparo com –quick ; nesse caso, apenas o arquivo de índice é recriado. Esse espaço deve estar disponível no mesmo sistema de arquivos que o arquivo de dados original, pois a cópia é criada no mesmo diretório que o original.
  • Espaço para o novo arquivo de índice que substitui o antigo. O arquivo de índice antigo é truncado no início da operação de reparo; portanto, você geralmente ignora esse espaço. Esse espaço deve estar disponível no mesmo sistema de arquivos que o arquivo de dados original.
  • Ao usar –recover ou –sort -recover (mas não ao usar –safe-recover ), você precisa de espaço no disco para classificar. Esse espaço é alocado no diretório temporário (especificado pela variável de ambiente TMPDIR ou com a opção –tmpdir = path ). A fórmula a seguir gera a quantidade de espaço necessária:(maior_chave + comprimento_do_intervalo de linhas) * número_de_rows * 2

    Você pode verificar o comprimento das chaves e o comprimento da linha_com_intervalo com myisamchk -dv nome_tabela (consulte a seção chamada “OBTENDO INFORMAÇÕES DA TABELA COM MYISAMCHK”). Os valores row_pointer_length e number_of_rows são o ponteiro Datafile e os valores dos registros Data na descrição da tabela. Para determinar o maior valor_chave , verifique as linhas Chave na descrição da tabela. A coluna Len indica o número de bytes para cada parte da chave. Para um índice de várias colunas, o tamanho da chave é a soma dos valores Len para todas as partes principais.

Se você tiver um problema com espaço em disco durante o reparo, tente –safe-recover em vez de –recover .

Exemplos

NotaComo mencionado acima, o myisamchk é um utilitário para verificar as tabelas MyISAM, que possuem as extensões de arquivo .MYD e .MYI . Esses arquivos são armazenados na pasta do banco de dados no diretório / var / lib / mysql . Por exemplo, se o seu banco de dados tiver o nome espero que esteja no diretório / var / lib / mysql / hope .

Além disso, lembre-se de que os arquivos .MYD e .MYI estão em maiúsculas.

  myisamchk -d nome_tabela

A execução do comando acima forneceria uma descrição e estatísticas sobre a tabela semelhante ao exemplo abaixo.

  Arquivo MyISAM: posts Formato do registro: Pacote de caracteres: latin1_swedish_ci (8)
 Registros de dados: 2273 Blocos excluídos: 0 Comprimento do registro: 2111 descrição da tabela: Key Start Len Tipo de índice 1 1 8
 ulonglong exclusivo 2 309 600 multip.  ?  prefixo 3 1736 60 multip.  prefixo varchar 65 60 varchar 17 8 longo 1 8
 ulonglong 4 957 8 multip.  ulonglong 5 5 254 texto completo?  empacotado 1 4 float 6 5 254 texto completo?  embalado 1 4 flutuador
  myisamchk -r posts.MYI

A execução do comando acima repararia a tabela posts.MYI. Se o -r não reparar a tabela, você poderá forçar o reparo usando a opção -f . Então, em vez do comando acima, você digitaria myisamchk -f posts.MYI .

mysql – Um sistema de gerenciamento de banco de dados relacional de código aberto.

Categorias
Compartilhe esse post

Posts populares

Linux Force Security Cursos de linux e segurança da informação

Seu futuro na tecnologia começa agora! Não deixe essa chance escapar.