45 votes

Comment faire pour que le MEMORY ENGINE de mysql stocke plus de données ?

Je veux modifier une table de INNODB à MEMORY ENGINE.

J'ai donc tapé cette commande :

alter table sns ENGINE=MEMORY;

Ensuite, le MySQL affiche

ERROR 1114 (HY000): The table '#sql-738_19' is full

La taille des données de la table est de 1 Go, et je dispose de 8 Go de mémoire.

J'ai vérifié dans my.cnf, et je n'ai pas trouvé où modifier le paramètre max_size. Ne devrais-je pas être en mesure de stocker plus de données ?

91voto

RolandoMySQLDBA Points 19439

Vous devriez ajuster la façon dont vous faites et chargez la table

CREATE TABLE sns_memory SELECT * FROM sns WHERE 1=2;
ALTER TABLE sns_memory ENGINE=MEMORY;
INSERT INTO sns_memory SELECT * FROM sns;
DROP TABLE sns;
ALTER TABLE sns_memory RENAME sns;

Cela permet de contourner les limites imposées par tmp_table_size y taille max_heap_table_size .

Tout de même, vous devez faire deux choses :

Ajoutez ceci à /etc/my.cnf

[mysqld]
tmp_table_size=2G
max_heap_table_size=2G

cela couvrira les redémarrages de mysql. Pour définir ces valeurs dans mysqld maintenant sans redémarrer, exécutez ceci :

SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;

Si vous vérifiez les variables ci-dessus avec

SELECT @@max_heap_table_size;

o

SHOW VARIABLES LIKE 'max_heap_table_size';

vous pouvez remarquer qu'ils ne semblent pas changer suite à la SET GLOBAL... déclarations. Cela est dû au fait que les paramètres ne s'appliquent qu'aux nouvelles connexions au serveur. Effectuez une nouvelle connexion et vous verrez les valeurs mises à jour. Vous pouvez également les modifier dans votre session en exécutant :

SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;

12voto

Cez Points 2666

taille max_heap_table_size est ce que vous recherchez

7voto

thephper Points 254

La taille maximale de la table de mémoire est définie lors de la création et de la modification et est basée sur la valeur max_heap_table_size.

Ainsi, lorsque vous voulez augmenter la taille maximale d'une existant vous pouvez modifier la taille max_heap_table_size et ensuite l'appliquer en modifiant la table au même moteur de stockage.

Exemple :

# Raise max size to 4GB
SET max_heap_table_size = 1024 * 1024 * 1024 * 4;

# If already a memory table, the alter will not change anything.
# Only apply the new max size.
ALTER TABLE table_name ENGINE=MEMORY;

Malentendu concernant tmp_table_size

La variable tmp_table_size ne détermine que la taille maximale de la table de travail. interne les tables de mémoire. Non définies par l'utilisateur.

Comme indiqué dans le Documentation sur MySQL :

La taille maximale des tables temporaires internes en mémoire. Cette variable ne s'applique pas aux tables MEMORY créées par l'utilisateur.

4voto

Tom Donnelly Points 11

Si vous rencontrez toujours un problème, rappelez-vous que l'espace disque occupé par une table est souvent inférieur à la mémoire requise. L'utilisation de VARCHAR (256) avec une chaîne de longueur 8 consommera 8 octets sur le disque, mais comme STORAGE ne prend pas en charge les rangées dynamiques, il réserve la totalité des 256 octets en mémoire pour chaque instance.

3voto

Karoly Horvath Points 45145

Augmenter max_heap_table_size .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X