Je charge un fichier de 100 Go via LOAD DATA INFILE. J'ai eu un bon succès avec MyISAM, quelques heures et c'est fait.
J'essaye maintenant en utilisant InnoDB. La charge démarre rapidement à plus de 10 Mo / s (la croissance du fichier de la table file_per_table
est activée).
Mais après environ 5 Go de données, il ralentit à une plage de 2 à 4 Mo / s, alors que j'obtiens plus de 20 Go, il a baissé d'environ 2 Mo / s.
La taille des pools de mémoire tampon InnoDB est de 8G. Et j'ai fait ce qui suit avant d'exécuter la commande 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....
Je ne vois pas pourquoi cela démarre bien et ralentit avec le temps.
De plus, en utilisant les mêmes paramètres, j'ai exécuté la même commande LOAD DATA INFILE avec la table en utilisant InnoDB et MyISAM et un ensemble de données de test de 5 Go, MyISAM était 20 fois plus rapide:
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
Autre chose que je devrais envisager d'essayer? Le moteur MyISAM est capable de maintenir le taux de charge beaucoup mieux.
Détails supplémentaires:
J'ai essayé de charger les fichiers individuellement, aucune différence.
Soit dit en passant, j'ai 150 fichiers de 500 Mo chacun, dans chaque fichier les clés sont triées.
Après avoir obtenu 40 Go en une nuit, 12 heures plus tard, le taux de charge est tombé à 0,5 Mo / s, ce qui signifie que l'opération est pratiquement impossible.
Je n'ai trouvé aucune autre réponse à des questions similaires sur d'autres forums, il me semble qu'InnoDB ne prend pas en charge le chargement de grandes quantités de données dans des tableaux de plus de quelques Go.