LOAD DATA INFILE üzerinden 100GB dosya yüklüyorum. MyISAM ile birkaç saat başarılı oldum ve yaptım.
Şimdi InnoDB kullanarak deniyorum. Yük, 10MB / saniyenin üzerinde hızla başlar (tablo dosyasının büyümesini izler file_per_table
, açılır).
Ancak yaklaşık 5GB veri sonra 2-4MB / sn aralığına yavaşlar, 20GB'ın üzerine çıkarken 2MB / sn civarında azaldı.
InnoDB tampon havuzlarının boyutu 8G'dir. LOAD DATA INFILE komutunu çalıştırmadan önce aşağıdakileri yaptım:
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....
Neden iyi başladığını ve zaman içinde yavaşladığını göremiyorum.
Ayrıca, aynı ayarları kullanarak, InnoDB ve MyISAM ve 5GB test veri kümesini kullanan tabloyla aynı LOAD DATA INFILE komutunu çalıştırdım, MyISAM 20 kat daha hızlıydı:
InnoDB'nin:
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
Denemeyi düşünmem gereken başka bir şey var mı? MyISAM motoru, yük oranını daha iyi koruyabilir.
Ek detaylar:
Dosyaları tek tek yüklemeyi denedim, fark yok.
Bu arada, her biri 500MB'lık 150 dosyam var, her dosya içinde anahtarlar sıralanıyor.
Bir gece, 12 saat sonra 40 GB aldıktan sonra, yükleme hızı 0,5MB / sn'ye düştü, yani işlem pratik olarak imkansız.
Diğer forumlarda benzer sorulara başka cevap bulamadım, bana göre InnoDB, birkaç GB büyüklüğündeki tablolara büyük miktarda veri yüklemeyi desteklemiyor.