Tôi đang cố tải số lượng lớn khoảng 12 triệu bản ghi vào bảng InnoDB trong một (địa phương) mysql bằng LOAD DATA INFILE (từ CSV) và việc tìm kiếm mất rất nhiều thời gian để hoàn thành.cải thiện hiệu suất tải dữ liệu tải mysql
Loại khóa chính là UUID và các khóa không được phân loại trong các tệp dữ liệu.
tôi đã chia các tập tin dữ liệu vào file chứa 100000 hồ sơ và nhập nó như:
mysql -e 'ALTER TABLE customer DISABLE KEYS;'
for file in *.csv
mysql -e "SET sql_log_bin=0;SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;
SET AUTOCOMMIT=0;LOAD DATA INFILE '${file}' INTO TABLE table
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; COMMIT"
này hoạt động tốt trong vài trăm ngàn hồ sơ đầu tiên nhưng sau đó chèn giờ cho mỗi tải tiếp theo dường như để giữ phát triển (từ khoảng 7 giây để khoảng 2 phút cho mỗi tải trước khi tôi giết nó.)
tôi đang chạy trên một máy với 8GB RAM và đã thiết lập các thông số InnoDB để:
innodb_buffer_pool_size =1024M
innodb_additional_mem_pool_size =512M
innodb_log_file_size = 256M
innodb_log_buffer_size = 256M
Tôi cũng đã thử tải một CSV duy nhất chứa tất cả các hàng không có may mắn - điều này đã vượt quá 2 giờ trước khi tôi giết nó.
Có điều gì khác có thể tăng tốc độ này vì điều này có vẻ như là một thời gian quá nhiều để chỉ tải 12 triệu bản ghi?
[DISABLE KEYS không xuất hiện để hoạt động trong InnoDB] (http://serverfault.com/questions/291100/with-mysql-how-long-does-an-alter-table-disable-keys-statement- cuối cùng), câu trả lời về việc bỏ và thêm các chỉ mục phụ là tốt. – KCD
Không thể tắt «PRIMARY KEY'. Hoặc, nếu bạn có thể, "sửa chữa" sẽ tốn một thời gian dài khủng khiếp. –