Tôi đang tải tệp 100 GB qua LOAD DATA INFILE. Tôi đã thành công tốt đẹp với MyISAM, một vài giờ và đã hoàn thành.
Tôi đang dùng thử ngay bây giờ bằng InnoDB. Tải bắt đầu nhanh với tốc độ trên 10MB / giây (xem tốc độ tăng trưởng tệp bảng, file_per_table
được bật).
Nhưng sau khoảng 5 GB dữ liệu, nó chậm lại trong phạm vi 2-4 MB / giây, khi tôi nhận được hơn 20 GB, nó đã giảm xuống khoảng 2 MB / giây.
Kích thước vùng đệm của InnoDB là 8G. Và tôi đã thực hiện các thao tác sau trước khi chạy lệnh 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....
Tôi không thể thấy lý do tại sao nó bắt đầu tốt và chậm lại theo thời gian.
Ngoài ra, sử dụng cùng các cài đặt, tôi đã chạy cùng một lệnh LOAD DATA INFILE với bảng bằng InnoDB và MyISAM và bộ dữ liệu thử nghiệm 5 GB, MyISAM nhanh hơn 20 lần:
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
Bất cứ điều gì khác tôi nên xem xét cố gắng? Công cụ MyISAM có thể theo kịp tốc độ tải tốt hơn nhiều.
Chi tiết bổ sung:
Tôi đã thử tải các tệp riêng lẻ, không có sự khác biệt.
Tình cờ, tôi có 150 tệp 500 MB mỗi tệp, trong mỗi tệp được sắp xếp các khóa.
Sau khi nhận được 40 GB trong một đêm, 12 giờ sau, tốc độ tải xuống còn 0,5 MB / giây, nghĩa là hoạt động thực tế là không thể.
Tôi không tìm thấy bất kỳ câu trả lời nào khác cho các câu hỏi tương tự trên các diễn đàn khác, dường như với tôi rằng InnoDB không hỗ trợ tải một lượng lớn dữ liệu vào các bảng có kích thước vài GB.