Il y a différents cas où vous pouvez obtenir cette erreur :
Vous utilisez une ancienne version de MySQL (avant 3.23.0)
quand une table temporaire en mémoire devient plus grande
que tmp_table_size
octets. Pour éviter
ce problème, vous pouvez utiliser l'option -O
tmp_table_size=#
pour faire augmenter la taille
des tables temporaires à mysqld
ou
utiliser l'option SQL BIG_TABLES
avant
d'exécuter la requête qui pose problème. See
Section 13.5.2.8, « Syntaxe de SET
».
Vous pouvez aussi démarrer mysqld
avec
l'option --big-tables
. Cela revient à
utiliser BIG_TABLES
pour toutes les
requêtes.
Dans la version 3.23 de MySQL, les tables temporaires en
mémoire seront automatiquement changées en tables physique
MyISAM
après qu'elles n'aient dépassé
tmp_table_size
.
Vous utilisez des tables InnoDB
et avez
dépassé leur taille. Dans ce cas, la solution est
d'augmenter les tailles des tables. See
Section 15.8, « Ajouter et retirer des données et des logs InnoDB
».
Vous utilisez des tables ISAM
ou
MyISAM
sur un système d'exploitation qui
ne supporte pas les fichiers de plus de 2G et vous avez
atteint cette limite dans le fichier de données ou d'index.
See Section 5.2.3, « Variables serveur système ».
Vous utilisez des tables MyISAM
et la
taille des données ou de l'index est plus grande que celle
que MySQL a alloué aux pointeurs. (Si vous ne spécifiez
pas MAX_ROWS
à CREATE
TABLE
MySQL n'allouera que des pointeurs
supportant 4G de données).
Vous pouvez obtenir la taille maximale des données / index en faisant :
SHOW TABLE STATUS FROM database LIKE 'nom_de_table';
or using myisamchk -dv
database/nom_de_table
.
Si le problème vient de là, vous pouvez le corriger en faisant quelque chose se rapprochant de :
ALTER TABLE nom_de_table MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
Vous n'avez besoin de spécifier
AVG_ROW_LENGTH
que pour les tables avec
des champs BLOB/TEXT car dans ce cas, MySQL ne peut
optimiser l'espace requis en se basant uniquement sur le
nombre de lignes.
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.