Tôi đang gặp sự cố khi tải dữ liệu vào (các) bảng MyISAM đồng thời sử dụng LOAD DATA INFILE
. Các hoạt động tải hoạt động tốt trong sự cô lập. Cố gắng thực hiện LOAD DATA INFILE
đồng thời các hoạt động, các khối - khóa hệ thống, trong thông tin lược tả MySQL - cho đến khi kết thúc trước đó. Điều này xảy ra độc lập với việc tải vào cùng một bảng / khác nhau hoặc thậm chí một cơ sở dữ liệu khác nhau. InnoDB không có vấn đề tương tự, tuy nhiên, MyISAM có vẻ phù hợp hơn với bảng ghi nhật ký thuần túy.
Các LOAD DATA INFILE
hoạt động đồng thời có thể được thực hiện với công cụ MyISAM trên MySQL không? Tôi có thiếu một số cài đặt quan trọng không (DISABLE KEYS tự động đối với cơ sở dữ liệu trống)? Đã thử nghiệm trên MySQL 5.1.63 và 5.5.14.
Tôi dự kiến tải bằng cách sử dụng LOAD DATA INFILE
đồng thời các bảng khác nhau để thực hiện, tuy nhiên, hiệu suất thay vào đó bị phá hủy hoàn toàn.
Để nhân rộng kịch bản của tôi:
SQL
CREATE DATABASE test;
CREATE TABLE `log_isam` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`num` int(11) DEFAULT NULL,
`surname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE log_isam ADD INDEX num(num);
CREATE TABLE `log_isam2` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`num` int(11) DEFAULT NULL,
`surname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE log_isam2 ADD INDEX num(num);
LOAD DATA nội dung tệp log.txt
https://gist.github.com/4245602
Kịch bản Shell
MYSQL_USER=root
MYSQL_PASS=PASS
time mysql -u$MYSQL_USER -p$MYSQL_PASS -e \
"LOAD DATA INFILE '/tmp/log.txt' \
INTO TABLE log_isam FIELDS TERMINATED BY ','" test & \
time mysql -u$MYSQL_USER -p$MYSQL_PASS -e \
"LOAD DATA INFILE '/tmp/log.txt' \
INTO TABLE log_isam2 FIELDS TERMINATED BY ','" test