LOAD DATA INFILE chặn khi sử dụng đồng thời với các bảng MyISAM


7

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 INFILEhoạ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

Câu trả lời:


2

Đồng thời LOAD DATA INFILEtrên các bảng MyISAM bị giới hạn bởi tắc nghẽn mutex do Bộ đệm chính toàn cầu. Để giảm bớt tắc nghẽn khóa, các bảng MyISAM có thể được đặt để có Bộ đệm chính.

SET GLOBAL isam_cache.key_buffer_size=8*1024;
SET GLOBAL isam_cache_two.key_buffer_size=8*1024;
CACHE INDEX log_isam IN isam_cache;
CACHE INDEX log_isam2 IN isam_cache_two;

Vì câu trả lời của tôi không có ích, tôi có thể loại bỏ nó. +1 cho bạn !!!
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.