Ich habe einen Deadlock, wenn mehrere gleichzeitige LOAD DATA INFILE Commands verwendet werden. Hier ist der Hintergrund:Infobright/MySQL Daten-Infile-Deadlock laden
Ich habe ein Java-basiertes ETL-Tool entwickelt, das flache Dateien in Infobright-Datenbanken lädt (Infobright ist eine auf MySQL basierende Kolumnar-Datenbank). Am Ende der Verarbeitung wird der Ladevorgang mit einem Befehl LOAD DATA INFILE ausgeführt. Dieser Prozess kann das Laden in mehrere Tabellen verarbeiten, und jede Belastung erfolgt parallel über eine separate Verbindung (aus Leistungsgründen).
Ich habe auch ein Bash-Skript geschrieben, das dieses Tool parallel für mehrere Dateien ausführt (um Zeit im Verarbeitungsteil zu sparen, da die LOAD-Befehle ohnehin vom DB-Server serialisiert werden). Dies bedeutet, dass ich mehrere LOAD DATA-Befehle für dieselbe Zieltabelle (von verschiedenen Prozessen) haben kann.
Was ich erwartete war, dass der Befehl LOAD DATA in einer seriellen Weise ausgeführt werden würde, aber schließlich beenden würde. Ich habe jedoch einen Deadlock. Wenn ich eine "show processlist" ausführe, kann ich sehen, dass sich alle meine LOAD DATA Befehle im "System locked" Zustand befinden.
Hat jemand schon einmal ein solches Problem erlebt und eine Lösung gefunden?
Details: Ich verwende Infobright Enterprise Edition v3.5.2. Dies basiert auf
MySQL 5.1.40. Meine ETL-Anwendung verwendet Java 1.5.0_08 und Mysql
Connector Java v5.1.12. OS: Centos 5.6 64 Bit (Linux 2.6.18-238.12.1.el5)
Ich würde auch vorschlagen, die neueste Ausgabe von Infobright 4.0.6 wegen einiger großer Verbesserungen, die in den LOAD DATA-Befehlen mit besserem Threading getan werden, sowie das Hinzufügen von Zeilen-Level-Fehlerprüfung für die Unterstützung. –