Saya memuat file 100GB melalui LOAD DATA INFILE. Saya sudah sukses dengan MyISAM, beberapa jam dan selesai.
Saya coba sekarang menggunakan InnoDB. Muatan mulai cepat di lebih dari 10MB / detik (menonton pertumbuhan file tabel, file_per_table
dihidupkan).
Tetapi setelah sekitar 5GB data melambat ke kisaran 2-4MB / detik, karena saya mendapatkan lebih dari 20GB itu turun sekitar 2MB / detik.
Ukuran buffer pool InnoDB adalah 8G. Dan saya telah melakukan hal berikut sebelum menjalankan perintah 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....
Saya tidak bisa melihat alasan mengapa ia memulai dengan baik dan melambat seiring berjalannya waktu.
Selain itu, dengan menggunakan pengaturan yang sama, saya menjalankan perintah LOAD DATA INFILE yang sama dengan tabel menggunakan InnoDB dan MyISAM dan dataset uji 5GB, MyISAM 20x lebih cepat:
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
Ada lagi yang harus saya pertimbangkan untuk mencoba? Mesin MyISAM mampu menjaga laju muat jauh lebih baik.
Detil tambahan:
Saya sudah mencoba memuat file secara individual, tidak ada perbedaan.
Kebetulan, saya punya 150 file masing-masing 500MB, dalam setiap file kunci diurutkan.
Setelah mendapatkan 40GB dalam semalam, 12 jam kemudian, laju muat turun menjadi 0,5MB / detik, yang berarti operasi itu, secara praktis, tidak mungkin.
Saya belum menemukan jawaban lain untuk pertanyaan serupa di forum lain, sepertinya bagi saya InnoDB tidak mendukung memuat data dalam jumlah besar ke dalam tabel dengan ukuran lebih dari beberapa GB.