Apache Derby INSERTS sind langsam

8

Ich verwende Apache Derby, um eine große Anzahl von Zeilen in der Größenordnung von 10 Millionen Millions zu speichern. Jedes Mal, wenn ich eine Batch-Eingabe einleite, werde ich bis zu 2 Millionen weitere Zeilen in die Tabelle einfügen. Die Tabelle hat eine UUID als Primärschlüssel und eine einzige Einschränkung für eine UUID in einer anderen Tabelle. Der Einsatz dauert Stunden !!! Warum ? Ich habe INDEXs für alle Tabellen erstellt - aber ich habe das jetzt entfernt, da ich glaube, dass Derby automatisch einen INDEX für jede Tabelle mit einem Primärschlüssel erstellt. Ich verwende das Batch-Update mit einer vorbereiteten Anweisung wie in der Abbildung gezeigt (in sehr einfacher Form)

%Vor%

Hier sind die Ergebnisse

%Vor%

Wenn ich immer mehr Zeilen einfüge, wird der Prozess immer langsamer (wahrscheinlich wegen INDEX). Das DB-Modell, das ich im Moment habe, dient meinen Zwecken und ich zögere, es zu ändern. Mache ich etwas falsch ? ... oder zu viel erwartet? Gibt es eine Möglichkeit, die INSERT-Geschwindigkeit zu verbessern?

Bearbeiten

Ich habe bereits die DB mit Autocommit und anderen abgestimmt. Ich habe festgestellt, dass wenn Millionen von Datensätzen eingefügt werden - es dauert eine unangemessene Zeit für meine Anwendung. SELECT auf diese Daten ist natürlich sehr schnell.

    
Andy Tudor 05.01.2012, 16:05
quelle

1 Antwort

8

Haben Sie versucht, den Autocommit-Modus auszuschalten? Von Ссылка :

Einfügungen können im Autocommit-Modus schmerzhaft langsam sein, da jedes Commit ein beinhaltet Aktualisierung des Protokolls auf der Festplatte für jede INSERT-Anweisung. Das Commit wird erst zurückkommen Ein physikalischer Schreibvorgang wird ausgeführt. Um die Dinge zu beschleunigen:

  • Im autocommit false-Modus ausführen, mehrere Einfügungen in einer Transaktion ausführen und dann explizit ein Commit ausstellen.
  • Wenn Ihre Anwendung ein initiales Laden in die Tabelle zulässt, können Sie den Import verwenden Verfahren zum Einfügen von Daten in eine Tabelle. Derby wird die einzelnen Einsätze nicht protokollieren Laden in eine leere Tabelle mit diesen Schnittstellen. Siehe den Derby-Hinweis Handbuch und Derby Server and Administration Guide für weitere Informationen zum Importverfahren.
Chris Shain 05.01.2012 20:09
quelle

Tags und Links