LOAD DATA INFILEを介して100GBのファイルをロードしています。私はMyISAMで数時間成功しました。
私は今InnoDBを使って試しています。ロードは10MB /秒以上で高速に開始されます(テーブルファイルの増大を監視し、file_per_table
オンになっています)。
しかし、約5 GBのデータの後、2〜4 MB /秒の範囲に低下します。20GBを超えると、約2 MB /秒になりました。
InnoDBバッファープールのサイズは8Gです。そして、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....
開始が順調に進み、時間がたつにつれて速度が低下している理由がわかりません。
また、同じ設定を使用して、InnoDBとMyISAMおよび5GBテストデータセットを使用したテーブルで同じLOAD DATA INFILEコマンドを実行すると、MyISAMは20倍高速になりました。
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
他に試してみるべきことはありますか?MyISAMエンジンは、負荷率をはるかに向上させることができます。
追加の詳細:
ファイルを個別にロードしようとしましたが、違いはありません。
ちなみに、各500MBの150個のファイルがあり、各ファイル内でキーがソートされています。
12時間後に40GBを一晩で取得した後、負荷率は0.5MB /秒に低下しました。つまり、実際には、操作は不可能です。
私は他のフォーラムで同様の質問に対する他の回答を見つけていません。InnoDBは、サイズが数GBを超えるテーブルへの大量のデータのロードをサポートしていないようです。