Utilisateur MySQL créé table temporaire est plein
J'ai créé une table temporaire en utilisant le moteur de mémoire de la manière suivante:
CREATE TEMPORARY TABLE IF NOT EXISTS some_text (
id INT DEFAULT 0,
string varchar(400) DEFAULT ''
) engine = memory;
Lorsque j'insère des lignes dans ce que je tombe sur un #1114 erreur parce que la table est pleine. Il explique dans le mysql docs que la modification de la tmp_table_size
et la max_heap_table_size
ne font rien pour augmenter la taille de l'utilisateur créé des tables temporaires, qui est, je pense, ce que j'ai ici. Comment dois-je faire pour rendre ce tableau plus grande?
J'aimerais être capable de faire cela de façon dynamique avec un appel à l'ENSEMBLE, mais j'ai essayé de réglage tmp_table_size
et la max_heap_table_size
et ils sont tous les deux bien au-delà de la quantité de données que je m'attends à ce que dans ce tableau. Donc, personne ne sait comment résoudre cette erreur sur cette table? Merci à toute personne qui aide.
OriginalL'auteur usumoio | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
max_heap_table_size
est une limite de la taille de tout table (temporaire ou non) qui utilise la MÉMOIRE de stockage du moteur. Vous aurez à augmenter cette option de configuration pour stocker plus de données dans la table.max_heap_table_size
sur l'ensemble de ma DB. Il est préférable de l'utiliserset max_heap_table_size = 33554432
pour définir la limite juste pour ma procédure stockée, puis éventuellement le ramener une fois qu'il termine en cours d'exécution? Merci encore.Oui,
max_heap_table_size
peut être réglé avec la portée de session (cf. dev.mysql.com/doc/refman/5.6/en/...), de sorte que vous pouvez faire le changement avec un impact limité.Je reçois le message, même après l'augmentation de
max_heap_table_size
ettmp_table_size
à la 4G!les données que vous stockez dans un tableau peut être plus importante que la 4G.
OriginalL'auteur Bill Karwin
Dans MySQL, par défaut, les tables temporaires créées avec le moteur de mémoire peut croître rapidement au-delà de la limite de 16 mo de max-heap-tableau de taille et tmp-tableau de taille parce que plus de la mémoire est allouée par ligne que ce qui est généralement requis. Dans l'exemple, le type VARCHAR(400) va allouer de la mémoire en fonction de la taille maximale de la chaîne, pas la taille réelle de vos données. Chaque personnage peut exiger plus de 1 octet pour le stockage. Supposons que chaque ligne nécessite 2kb, alors il ne faut 8k lignes pour atteindre la limite.
Pour de nombreuses applications, ce problème peut être résolu en utilisant ROW_FORMAT=DYNAMIQUE comme expliqué ici:
http://www.percona.com/doc/percona-server/5.5/flexibility/improved_memory_engine.html
OriginalL'auteur CQ Bear