web-dev-qa-db-fra.com

Comment faire pour que le MOTEUR MÉMOIRE mysql stocke plus de données?

Je souhaite modifier une table d'INNODB en MEMORY ENGINE.

J'ai donc tapé cette commande:

alter table sns ENGINE=MEMORY;

Ensuite, MySQL montre

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

La taille des données pour la table est de 1 Go et j'ai 8 Go de mémoire.

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

34
Bing Hsu

Vous devez ajuster la façon dont vous créez 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 contournera toutes les limites imposées par tmp_table_size et max_heap_table_size .

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;

ou

SHOW VARIABLES LIKE 'max_heap_table_size';

vous remarquerez peut-être qu'ils ne semblent pas changer après le SET GLOBAL... déclarations. En effet, les paramètres s'appliquent uniquement aux nouvelles connexions au serveur. Établissez une nouvelle connexion, et vous verrez la mise à jour des valeurs ou vous pouvez la modifier dans votre session en exécutant:

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

max_heap_table_size est ce que vous recherchez

8
Cez

Si vous rencontrez toujours un problème, n'oubliez pas 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 lignes dynamiques, il réserve les 256 octets en mémoire pour chaque instance.

2
Tom Donnelly

Augmenter max_heap_table_size.

2
Karoly Horvath