2012-03-23 15 views
33

Desidero modificare una tabella da INNODB a MEMORY ENGINE.Come rendere MEMORY ENGINE mysql più dati?

Così ho digitato questo comando:

alter table sns ENGINE=MEMORY;

Poi il MySQL mostra

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

La dimensione dei dati per la tabella è da 1 GB, e ho 8GB di memoria.

Ho controllato my.cnf e non ho trovato dove modificare l'impostazione max_size. Non dovrei essere in grado di memorizzare più dati?

risposta

63

Si dovrebbe regolare il modo di fare e caricare la tabella

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; 

questo sarà aggirare eventuali limiti imposti dalla tmp_table_size e max_heap_table_size.

Proprio lo stesso, è necessario fare due cose:

Aggiungi questo al /etc/my.cnf

[mysqld] 
tmp_table_size=2G 
max_heap_table_size=2G 

questa coprirà riavvio di MySQL. Per impostare questi valori a mysqld in questo momento senza riavviare eseguire questo:

SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2; 
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2; 

Se si sta controllando le variabili di cui sopra con

SELECT @@max_heap_table_size; 

o

SHOW VARIABLES LIKE 'max_heap_table_size'; 

si può notare che don' t sembra cambiare seguendo le dichiarazioni SET GLOBAL.... Questo perché le impostazioni si applicano solo alle nuove connessioni al server. Effettuare una nuova connessione, e vedrete l'aggiornamento dei valori o si potrebbe cambiare entro la sessione eseguendo:

SET tmp_table_size = 1024 * 1024 * 1024 * 2; 
SET max_heap_table_size = 1024 * 1024 * 1024 * 2; 
+0

Se lo stai modificando in una tabella di memoria, perché sei preoccupato per il trasferimento dei dati? Dovresti essere pronto a perderlo! Quindi basta troncarlo e quindi modificare la tabella ... – VBAssassin

+0

Perché imposti 'tmp_table_size = 2G'? L'ho lasciato al valore predefinito (16MiB) nel mio server 5.5 e sono ancora in grado di memorizzare fino al mio 'max_heap_table_size' (~ 400MiB) nelle tabelle con memoria supportata. –

+0

È anche possibile modificare le 2 variabili precedenti per la sessione solo facendo così 'SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2; SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2; ' – Jaylen

2

Aumentare max_heap_table_size.

2

Se hai ancora un problema, ricordate che lo spazio su disco una tabella occupa spesso meno del requisito di memoria. L'utilizzo di VARCHAR (256) con una stringa di lunghezza 8 consumerà 8 byte sul disco ma poiché STORAGE non supporta le righe dinamiche, riserva i 256 byte pieni in memoria per ogni istanza.