Voglio velocizzare il caricamento dei dati.
Uso MySQL 5.5, InnoDB e ho file 1M di dati (file 65Mb). Ci vogliono 5 minuti.
Quali impostazioni e comandi di mysql influiscono sulla velocità di LOAD DATA INFILE per InnoDB?
Grazie.
risposte:
19 per risposta № 1Posso consigliare queste impostazioni per migliorare il tempo di caricamento:
- innodb_doublewrite = 0
- innodb_support_xa = 0
- innodb_buffer_pool_size = (50-80% della memoria di sistema)
- innodb_log_file_size = (un numero elevato - 256 M ecc.)
- innodb_flush_log_at_trx_commit = 0
Oltre alle impostazioni, ci sono alcune cose che puoi fare da te:
- Crea indici dopo il caricamento (questa è una nuova ottimizzazione con il plugin 5.5 / InnoDB).
- Ordina il file di dati prima di caricarlo.
- Dividere il file di dati e caricare in parallelo.
4 per risposta № 2
Prova a rimuovere indici e trigger. Puoi ricrearli dopo il caricamento. Osserva anche l'uso di alcune delle impostazioni di alto carico in my-huge.cnf invece dei valori predefiniti.
Alcune impostazioni di prestazioni più inedite:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
2 per risposta № 3
Questo potrebbe non essere esattamente quello che stai cercando, ma è un trucco che ho usato in passato
ALTER TABLE TABLE_NAME DISABLE KEYS;
LOAD DATA INFILE ... ;
ALTER TABLE TABLE_NAME ENABLE KEYS;
Spero che sia d'aiuto.
0 per risposta № 4
Assicurarsi inoltre che la registrazione binaria sia disabilitata, se possibile.
0 per risposta № 5
Se hai fretta perché stai sostituendo il contenuto di una tabella live, fallo invece in questo modo:
CREATE TABLE new LIKE live;
LOAD DATA ... INTO new;
RENAME TABLE live TO old, new TO live;
DROP TABLE old;
Il RENAME
è "istantaneo" e atomico, quindi non si "mai" verso il basso, indipendentemente dalle dimensioni della tabella.
(Quindi non c'è bisogno di preoccuparsi così tanto di accelerare il LOAD
.)