MySQL: The table ‘<tabela>’ is full
Eu nunca ouvi falar que existia um limite para tamanho de tabelas no MySQL. Até o dia que me deparei com a seguinte mensagem de erro:
The table '<tabela>' is full
Como assim a tabela está cheia? Ela nunca deveria ficar cheia a menos que faltasse espaço em disco. Pois é, não é bem assim.
Em tabelas MyISAM, os índices são gravados em um arquivo contendo ponteiros para as posições no arquivo de dados. Em hardware de 32 bits, esses ponteiros são de 32 bits também (o acesso é mais rápido), permitindo um endereçamento máximo de 4GB de memória. Em outras palavras, arquivos de dados maiores que 4GB não são permitidos; quando esse limite é alcançado, o erro de tabela cheia é disparado.
Aparentemente esse erro não ocorre em sistemas de 64 bits (o ponteiro nesse caso é de 64 bits e o limite de endereçamento para 64 bits é muito maior) e nem em tabelas InnoDB, porque o modo de armazenamento é diferente, e não vulnerável a essa limitação.
Uma solução portanto é alterar a tabela que supostamente está cheia para trabalhar com o engine InnoDB. Mas saiba que alterar o engine de uma tabela com 4GB de dados vai demorar. Não se desespere e nem interrompa o processo, ou terá problemas sérios (corrupção de dados).
Links relacionados
- PHP 6 Fast and Easy Web Development
- Construindo Aplicações Web com PHP e MySQL
- PHP : do Básico à Orientação a Objetos
- Guia Profissional PHP
- PHP 6 E MYSQL 5 para Web Sites Dinâmicos: Aprenda PHP E MYSQL...
- PHP 5: Programação Poderosa
Deixe um comentário