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;