Powinieneś dostosować sposób tworzenia i ładowania stołu
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;
Pozwoli to obejść wszelkie narzucone limity przez tmp_table_size i max_heap_table_size .
Tak samo musisz zrobić dwie rzeczy:
Dodaj to do /etc/my.cnf
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
obejmie to ponowne uruchomienie mysql. Aby ustawić te wartości w mysqld teraz bez ponownego uruchamiania, uruchom to:
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
Jeśli sprawdzasz powyższe zmienne za pomocą
SELECT @@max_heap_table_size;
lub
SHOW VARIABLES LIKE 'max_heap_table_size';
możesz zauważyć, że nie zmieniają się po SET GLOBAL...
sprawozdania. Dzieje się tak, ponieważ ustawienia dotyczą tylko nowych połączeń z serwerem. Nawiąż nowe połączenie, a zobaczysz zaktualizowane wartości lub możesz je zmienić w trakcie sesji, uruchamiając:
SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;