Debe ajustar la manera de hacer y cargar la tabla
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;
Esto hará que alrededor de los límites impuestos por tmp_table_size y max_heap_table_size.
De todos modos, es necesario hacer dos cosas:
añadir esto a /etc/my.cnf
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
Esto cubrirá reinicia MySQL. Para establecer estos valores en mysqld en este momento sin necesidad de reiniciar ejecutar este:
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
Si está revisando las variables anteriores con
SELECT @@max_heap_table_size;
o
SHOW VARIABLES LIKE 'max_heap_table_size';
puede observar que ellos no' parece cambiar después de las declaraciones SET GLOBAL...
. Esto se debe a que la configuración solo se aplica a las conexiones nuevas al servidor. Realizar una nueva conexión, y verá la actualización de los valores o se puede cambiar dentro de su sesión ejecutando:
SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;
Si lo está cambiando a una tabla de memoria, ¿por qué le preocupa transferir los datos? ¡Deberías estar preparado para perderlo! Así que solo trunque y luego modifique la tabla ... – VBAssassin
¿Por qué establece 'tmp_table_size = 2G'? Dejé eso en el predeterminado (16MiB) en mi servidor 5.5 y todavía puedo almacenar hasta mi 'max_heap_table_size' (~ 400MiB) en tablas respaldadas por memoria. –
También puede cambiar las 2 variables anteriores para la sesión sólo así 'tmp_table_size SET GLOBAL = 1024 * 1024 * 1024 * 2; SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2; ' – Jaylen