Erro: The table is full
exitem alguns casos diferentes nos quais você pode obter este erro:
- Você está usando um versão mais antiga do MariaDB (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 omysqld
aumentar o tamanho da tabela temporária ou usar a opção SQLSQL_BIG_TABLES
antes de disparar a consulta problematica. Leia "Sintaxe deSET
".Você também pode iniciar
mysqld
com a opção--big-tables
. Isto é extamente o mesmo que usarSQL_BIG_TABLES
para toadas as consultas.No MariaDB 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 discoMyISAM
. - Você está usando tabelas
InnoDB
e fica sem espaço no tablespace doInnoDB
. Neste cado a solução é extender o tablespace doInnoDB
. - Você está usando tabelas
ISAM
ouMyISAM
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 MariaDB alocou ponteiros. (Se você não especificarMAX_ROWS
paraCREATE TABLE
o MariaDB 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 camposBLOB/TEXT
já que neste caso o MariaDB não pode otimizar o espaço necessário baseado apenas no número de linhas.