mysql: The table is full



2011-04-16

Erro: The table is full

mysql logo

Há mais de uma possível causa que pode gerar esse erro:
  • Você está usando um versão mais antiga do MySQL (antes da 3.23.0) quando uma tabela temporária em memória se torna maior que tmp_table_size bytes. Para evitar este problema, você pode utilizar a opção -O tmp_table_size=# para fazer o mysqld aumentar o tamanho da tabela temporária ou usar a opção SQL SQL_BIG_TABLES antes de disparar a consulta problematica. Veja mais informações sobre isto na Seção 5.5.6, "Sintaxe de SET".
    Você também pode iniciar mysqld com a opção --big-tables. Isto é extamente o mesmo que usar SQL_BIG_TABLES para toadas as consultas.
    No MySQL Versão 3.23, se uma tabelas temporárias em memória se torna maior que tmp_table_size, o servido automaticamente a converte para tabelas em disco MyISAM.
  • Você está usando tabelas InnoDB e fica sem espaço no tablespace do InnoDB. Neste cado a solução é extender o tablespace do InnoDB.
  • Você está usando tabelas ISAM ou MyISAM em um SO que só suporta arquivos de 2G e você alcançou este limite para os arquivos de dado ou índice.
  • Você está usando tabelas MyISAM e o dado necessário ou tamanho do índice é maior que alqueles para os quais o MySQL alocou ponteiros. (Se você não especificar MAX_ROWS para CREATE TABLE o MySQL só alocará ponteriros para guardar 4G de dados).
    Você pode verificar o tamanho máximo do dados/índice fazendo
    SHOW TABLE STATUS FROM database LIKE 'nome_tabela'; 
    ou usando myisamchk -dv database/nome_tabela.
    Se este é o problema, você pode corrigí-lo fazendo algo como:
    ALTER TABLE nome_tabela MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn; 
    Você só precisa especificar AVG_ROW_LENGTH para tabelas com campos BLOB/TEXT já que neste caso o MySQL não pode otimizar o espaço necessário baseado apenas no número de linhas.
Postar um comentário