2012-03-23 8 views
33

Quiero alterar una tabla de INNODB a MEMORY ENGINE.¿Cómo hacer que el MOTOR DE MEMORIA mysql almacene más datos?

Así que escribió este comando:

alter table sns ENGINE=MEMORY;

A continuación, la muestra MySQL

ERROR 1114 (HY000): The table '#sql-738_19' is full 

El tamaño de los datos de la tabla es de 1 GB, y no tengo memoria de 8 GB.

yo nos registramos my.cnf, y no encontré dónde cambiar la configuración max_size. ¿No debería ser capaz de almacenar más datos?

Respuesta

63

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; 
+0

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

+0

¿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. –

+0

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

2

Aumentar max_heap_table_size.

2

Si todavía estás teniendo un problema, recuerda que el espacio en disco ocupa una mesa es a menudo menos que el requisito de memoria. El uso de VARCHAR (256) con una cadena de longitud 8 consumirá 8 bytes en el disco, pero dado que ALMACENAMIENTO no admite filas dinámicas, reserva los 256 bytes completos en memoria para cada instancia.

Cuestiones relacionadas