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?
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;
max_heap_table_size est ce que vous recherchez
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.
Augmenter max_heap_table_size
.