2012-04-09 10 views
0

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)

+0

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. –

Antwort

0

Stellen Sie sicher, dass Sie genügend Speicher auf Ihrem System haben, um den ETL-Prozess und das Skript auszuführen. Aus externen Untersuchungen mit Ihnen wurde festgestellt, dass Sie auf einer Maschine mit nur 1GB RAM ([1002M/498M, 1/0.00]) laufen, was sehr gering ist. Versuchen Sie, Tests auf einem regulären Desktop-Klassencomputer (> 4G RAM) sowie auf einem Produktionsklassencomputer (> 32G RAM) durchzuführen.

+0

Bitte fügen Sie keine Signaturen in Ihre Beiträge ein. – Aaron

Verwandte Themen