ฉันกำลังโหลดไฟล์ 100GB ผ่าน LOAD DATA INFILE ฉันประสบความสำเร็จกับ MyISAM ไม่กี่ชั่วโมงและทำ
ฉันลองใช้ InnoDB ตอนนี้ โหลดเริ่มต้นอย่างรวดเร็วที่มากกว่า 10MB / วินาที (ดูการขยายไฟล์ตารางfile_per_table
เปิดอยู่)
แต่หลังจากนั้นประมาณ 5GB ของข้อมูลมันจะช้าลงเป็นช่วง 2-4MB / วินาทีเพราะฉันได้มากกว่า 20GB มันก็ลดลงประมาณ 2MB / วินาที
ขนาดบัฟเฟอร์พูล InnoDB คือ 8G และฉันได้ทำสิ่งต่อไปนี้ก่อนที่จะใช้คำสั่งโหลดข้อมูล 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....
ฉันไม่เห็นเหตุผลที่มันเริ่มต้นได้ดีและช้าลงเมื่อเวลาผ่านไป
นอกจากนี้การใช้การตั้งค่าเดียวกันฉันใช้คำสั่งโหลดข้อมูล INFILE เดียวกันกับตารางโดยใช้ InnoDB และ MyISAM และชุดข้อมูลทดสอบ 5GB 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 สามารถติดตามอัตราการโหลดได้ดียิ่งขึ้น
รายละเอียดเพิ่มเติม:
ฉันพยายามโหลดไฟล์แยกทีละตัวไม่ต่างกัน
บังเอิญฉันมี 150 ไฟล์ 500MB ต่อไฟล์ภายในแต่ละไฟล์จะถูกจัดเรียงคีย์
หลังจากได้รับ 40GB ในชั่วข้ามคืน 12 ชั่วโมงต่อมาอัตราการโหลดลดลงเหลือ 0.5MB / วินาทีหมายความว่าการใช้งานเป็นไปไม่ได้
ฉันไม่พบคำตอบอื่น ๆ สำหรับคำถามที่คล้ายกันในฟอรัมอื่นดูเหมือนว่า InnoDB ไม่รองรับการโหลดข้อมูลจำนวนมากลงในตารางที่มีขนาดไม่กี่ GB