Ich lade eine 100-GB-Datei über LOAD DATA INFILE. Ich hatte gute Erfolge mit MyISAM, ein paar Stunden und fertig.
Ich versuche es jetzt mit InnoDB. Der Ladevorgang beginnt schnell bei über 10 MB / Sek.file_per_table
).
Aber nach ungefähr 5 GB Daten verlangsamt es sich auf den Bereich von 2 bis 4 MB / s, da ich über 20 GB habe, war es um 2 MB / s niedriger.
Die Größe der InnoDB-Pufferpools beträgt 8 GB. Vor dem Ausführen des Befehls LOAD DATA INFILE habe ich Folgendes ausgeführt:
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....
Ich kann den Grund nicht erkennen, warum es gut anfängt und sich mit der Zeit verlangsamt.
Außerdem habe ich mit denselben Einstellungen denselben Befehl LOAD DATA INFILE mit der Tabelle ausgeführt, wobei InnoDB und MyISAM sowie ein 5-GB-Testdatensatz verwendet wurden. MyISAM war 20-mal schneller:
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
Was sollte ich sonst noch versuchen? Die MyISAM-Engine kann die Laderate viel besser halten.
Zusätzliche Details:
Ich habe versucht, die Dateien einzeln zu laden, kein Unterschied.
Ich habe übrigens 150 Dateien mit je 500 MB, in jeder Datei sind die Schlüssel sortiert.
Nach dem Erreichen von 40 GB über Nacht, 12 Stunden später, war die Laderate auf 0,5 MB / s gesunken, was bedeutet, dass der Betrieb praktisch unmöglich ist.
Ich habe keine anderen Antworten auf ähnliche Fragen in anderen Foren gefunden. Es scheint mir, dass InnoDB das Laden großer Datenmengen in Tabellen mit einer Größe von mehr als einigen GB nicht unterstützt.