Você deve ajustar a maneira como faz e carrega a mesa
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;
Isso contornará quaisquer limites impostos por tmp_table_size e max_heap_table_size .
Da mesma forma, você precisa fazer duas coisas:
Adicione isto a /etc/my.cnf
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
isso cobrirá as reinicializações do mysql. Para definir esses valores no mysqld agora sem reiniciar, execute isto:
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
Se você estiver verificando as variáveis acima com
SELECT @@max_heap_table_size;
ou
SHOW VARIABLES LIKE 'max_heap_table_size';
você pode notar que eles não parecem mudar seguindo o
SET GLOBAL...
declarações. Isso ocorre porque as configurações se aplicam apenas a novas conexões com o servidor. Faça uma nova conexão e você verá os valores atualizados ou poderá alterá-los em sua sessão executando:SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;