Należy dostosować sposób wprowadzania i załadować tabelę
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;
To będzie ominąć wszelkich ograniczeń nałożonych przez tmp_table_size i max_heap_table_size.
Tak samo trzeba zrobić dwie rzeczy:
Dodaj to do /etc/my.cnf
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
ten obejmie restartów MySQL. Aby ustawić te wartości w mysqld teraz bez ponownego uruchomienia to:
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
Jeśli sprawdzeniu powyższych zmiennych z
SELECT @@max_heap_table_size;
lub
SHOW VARIABLES LIKE 'max_heap_table_size';
można zauważyć, że don” Wydaje się zmieniać po wydaniu SET GLOBAL...
. Jest tak dlatego, że ustawienia dotyczą tylko nowych połączeń z serwerem. Nawiązać nowe połączenie, a zobaczysz aktualizację wartości lub można ją zmienić w ciągu sesji uruchamiając:
SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;
Jeśli zmieniasz go na tabelę pamięci - dlaczego obawiasz się przeniesienia danych? Powinieneś być przygotowany na utratę! Więc po prostu skróć to, a następnie zmień tabelę ... – VBAssassin
Dlaczego ustawiasz 'tmp_table_size = 2G'? Pozostawiłem to domyślnie (16 MB) na moim serwerze 5.5 i nadal mogę przechowywać do mojego 'max_heap_table_size' (~ 400MiB) w tabelach z pamięcią. –
Możesz także zmienić powyższe 2 zmienne tylko dla sesji, wykonując to: 'SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2; USTAW GLOBALNY max_heap_table_size = 1024 * 1024 * 1024 * 2; ' – Jaylen