JDBC-Batch-Einsatz ist langsam! Ich meine, wirklich langsam?

8

Hier ist der Deal:

  1. Ich erstelle eine Verbindung conn mit dem DriverManager
  2. Ich habe conn.autoCommit(false); festgelegt
  3. Dann habe ich PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
  4. Ich habe mehrere Parameter mit pStat.set eingestellt ... dann füge ich den Batch mit pStat.addBatch(); hinzu
  5. Alle 10000 Zeilen (ich rufe addBatch() 10000 mal an), rufe ich pStat.executeBatch(); an
  6. Nicht sicher, wenn nötig, aber ich rufe auch pStat.clearBatch() gleich nach
  7. auf

Auch wenn all das oben für mich gut klingt, ist das LANGSAM !!! .

Ich habe durchschnittlich nur 35 Datensätze (nur 8 Spalten insgesamt, nur ein technischer automatisch inkrementierter Primärschlüssel und einige Nicht-Null-Bedingungen) pro Sekunde. Ich berechne, dass ich eine Woche brauche, um alle meine 20 Millionen Zeilen einzufügen ...

Mache ich etwas falsch?

Wie viele Zeilen sollte ich bei jedem Stapelzyklus hinzufügen? Sind 10000 zu viele?

    
Gevorg 01.09.2011, 01:00
quelle

1 Antwort

1

Wenn Sie MySQL mit einem JDBC-Treiber für Version 5.1.7 verwenden, können Sie von einem Fehler betroffen sein Das verlangsamt Batch-Einsätze . Das Aktualisieren auf 5.1.10 oder höher sollte vorsichtig sein davon.

    
Knut Forkalsrud 01.09.2011 01:50
quelle