Uso de Memória do myisamchk
Alocação de memória é importante quando você executa o myisamchk. myisamchk não utiliza mais memória do que você especifica com a opção -O. Se você irá utilizar o myisamchk em grandes arquivos, você deve decidir primeiro quanta memória deseja usar. O valor padrão é utilizar somente 3MB para correções. Utilizando valores maiores, o myisamchk pode operar mais rapidamente. Por exemplo, se você tiver mais que 32M de memória RAM, você pode utilizar opções tais como esta (em adição às várias outras que podem ser especificadas):
shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...
Utilizando -O sort=16M provavelmente é suficiente para a maioria dos casos.
Certiffique-se que o myisamchk utiliza arquivos temporários em TMPDIR. Se TMPDIR aponta para um sistema de arquivos em memória, você pode facilmente obter erros de memória. Se isto acontecer, configure TMPDIR para apontar para algum diretório com mais espaço e reinicie o myisamchk.
Quando reparando, o myisamchk também precisará de bastante espaço em disco:
- Dobra-se o tamanho do arquivo de registros (o original e uma cópia). Este espaço não é necessário se for feito um reparo com
--quick, já que neste caso somente o arquivo de índices será recriado. Este espaço é necessário no mesmo disco que se encontra o arquivo de registros original! - Espaço para o novo arquivo de índice que substitui o antigo. O arquivo de índices antigo é truncando no início, portanto, normalmente este espaço é ignorado. Este espaço é necessário no mesmo disco que o arquivo de índice original!
- Quando utilizando
--recoverou--sort-recover(mas não quando usando--safe-recover, será necessário espaço para um buffer de ordenação de:(maior_chave + tamanho_do_ponteiro_de_registro)*número_de_registros * 2. Você pode conferir o tamanho das chaves e o tamanho_do_ponteiro_de_registro commyisamchk -dv tabela. Este espaço é alocado no disco temporário (especificado porTMPDIRou--tmpdir=#).
Se você tiver um problema com espaço em disco durante o reparo, pode-se tentar usar --safe-recover em vez de --recover.