exitem alguns casos diferentes nos quais você pode obter este 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. See Secçã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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.