Comando Linux 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.
O 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. A 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 .
Comandos relacionados
mysql – Um sistema de gerenciamento de banco de dados relacional de código aberto.