Sto caricando un file da 100 GB tramite LOAD DATA INFILE. Ho avuto un buon successo con MyISAM, poche ore e fatto.
Lo sto provando ora con InnoDB. Il caricamento inizia rapidamente a oltre 10 MB / sec (guardando la crescita del file della tabella, file_per_table
è attivato).
Ma dopo circa 5 GB di dati, questo rallenta fino a 2-4 MB / sec, poiché supero i 20 GB, era di circa 2 MB / sec.
La dimensione dei pool di buffer InnoDB è 8G. E ho fatto quanto segue prima di eseguire il comando LOAD DATA INFILE:
SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
Non riesco a vedere il motivo per cui inizia bene e rallenta nel tempo.
Inoltre, utilizzando le stesse impostazioni, ho eseguito lo stesso comando LOAD DATA INFILE con la tabella utilizzando InnoDB e MyISAM e un set di dati di test da 5 GB, MyISAM è stato 20 volte più veloce:
InnoDB:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 min 25.38 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
MyISAM:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (1 min 2.52 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
Qualcos'altro che dovrei considerare di provare? Il motore MyISAM è in grado di mantenere molto meglio la velocità di carico.
Dettagli aggiuntivi:
Ho provato a caricare i file singolarmente, nessuna differenza.
Per inciso, ho 150 file da 500 MB ciascuno, all'interno di ogni file le chiavi sono ordinate.
Dopo aver ricevuto 40 GB in una notte, 12 ore dopo, la velocità di carico è scesa a 0,5 MB / sec, il che significa che l'operazione è praticamente impossibile.
Non ho trovato altre risposte a domande simili su altri forum, mi sembra che InnoDB non supporti il caricamento di grandi quantità di dati in tabelle di dimensioni superiori a pochi GB.