Estou carregando um arquivo de 100 GB via LOAD DATA INFILE. Eu tive um bom sucesso com o MyISAM, algumas horas e pronto.
Estou tentando agora usando o InnoDB. O carregamento começa rapidamente em mais de 10 MB / s (observando o crescimento do arquivo da tabela, file_per_table
está ativado).
Mas, após cerca de 5 GB de dados, ele diminui para o intervalo de 2-4 MB / s, enquanto eu tenho mais de 20 GB, ele cai em torno de 2 MB / s.
O tamanho do buffer pool do InnoDB é 8G. E eu fiz o seguinte antes de executar o 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....
Não vejo a razão pela qual está começando bem e diminuindo com o tempo.
Além disso, usando as mesmas configurações, executei o mesmo comando LOAD DATA INFILE com a tabela usando o InnoDB e o MyISAM e um conjunto de dados de teste de 5 GB, o MyISAM foi 20x mais 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
Mais alguma coisa que eu deva considerar tentar? O mecanismo MyISAM é capaz de manter a taxa de carga muito melhor.
Detalhes adicionais:
Eu tentei carregar os arquivos individualmente, não há diferença.
Aliás, tenho 150 arquivos de 500 MB cada, em cada arquivo as chaves são classificadas.
Após receber 40 GB da noite para o dia, 12 horas depois, a taxa de carregamento caiu para 0,5 MB / s, o que significa que a operação é, praticamente falando, impossível.
Não encontrei outras respostas para perguntas semelhantes em outros fóruns, parece-me que o InnoDB não suporta o carregamento de grandes quantidades de dados em tabelas com mais de alguns GB de tamanho.