Ich habe Probleme beim gleichzeitigen Laden von Daten in MyISAM-Tabellen LOAD DATA INFILE
. Der Ladevorgang funktioniert isoliert einwandfrei. Beim gleichzeitigen Versuch, LOAD DATA INFILE
Vorgänge auszuführen, werden MySQL-Profilinformationen blockiert - eine Systemsperre -, bis die vorherige abgeschlossen ist. Dies geschieht unabhängig vom Laden in dieselbe / eine andere Tabelle oder sogar in eine andere Datenbank. InnoDB hat nicht die gleichen Probleme, MyISAM scheint jedoch besser für eine reine Protokollierungstabelle geeignet zu sein.
Können gleichzeitige LOAD DATA INFILE
Vorgänge mit der MyISAM-Engine unter MySQL ausgeführt werden? Fehlen mir einige wichtige Einstellungen (DISABLE KEYS wird automatisch für eine leere Datenbank ausgeführt)? Getestet unter MySQL 5.1.63 und 5.5.14.
Ich habe erwartet, dass das gleichzeitige Laden LOAD DATA INFILE
in verschiedene Tabellen performant ist, aber die Leistung wird stattdessen vollständig zerstört.
So replizieren Sie mein Szenario:
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 log.txt Dateiinhalt
https://gist.github.com/4245602
Shell-Skript
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