Estoy cargando un archivo de 100GB a través de LOAD DATA INFILE. He tenido buen éxito con MyISAM, unas pocas horas y listo.
Lo estoy intentando ahora usando InnoDB. La carga comienza rápidamente a más de 10 MB / s (ver el crecimiento del archivo de la tabla, file_per_table
está activada).
Pero después de aproximadamente 5 GB de datos, se ralentiza al rango de 2-4 MB / seg., Cuando obtengo más de 20 GB, disminuía alrededor de 2 MB / seg.
El tamaño de las agrupaciones de almacenamiento intermedio de InnoDB es 8G. Y he hecho lo siguiente antes de ejecutar el 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....
No puedo ver la razón por la cual está comenzando bien y disminuyendo con el tiempo.
Además, usando la misma configuración, ejecuté el mismo comando LOAD DATA INFILE con la tabla usando InnoDB y MyISAM y un conjunto de datos de prueba de 5GB, MyISAM fue 20 veces más rápido:
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
¿Algo más que deba considerar intentar? El motor MyISAM puede mantener la velocidad de carga mucho mejor.
Detalles adicionales:
He intentado cargar los archivos individualmente, no hay diferencia.
Por cierto, tengo 150 archivos de 500 MB cada uno, dentro de cada archivo se ordenan las claves.
Después de obtener 40 GB durante la noche, 12 horas después, la velocidad de carga se redujo a 0.5 MB / seg, lo que significa que la operación es, prácticamente hablando, imposible.
No he encontrado ninguna otra respuesta a preguntas similares en otros foros, me parece que InnoDB no admite cargar grandes cantidades de datos en tablas de más de unos pocos GB.