2017-05-17 3 views
0

Ich füge 1 Million Datensätze in eine leere Oracle-Tabelle. Um Einsatz zur Verbesserung der Leistung ich folgende Optimierungen versucht:Oracle einfügen Optimierung mit JDBC-Treiber

  • geben/* + APPEND */Hinweis in INSERT-Abfrage
  • Index deaktivieren vor dem Einsetzen und dann erneut ermöglicht es einmal Insertion erfolgt
  • nologging auf dem Tisch aktivieren.

Allerdings kann ich keine Verbesserung der Insert-Leistung feststellen. Ich kann nicht herausfinden warum.

Bitte beachte, dass ich verwende org.springframework.jdbc.core.JdbcTemplate#batchUpdate für Einfügen von Datensätzen und ich bin Einfügen von Datensätzen in der Charge von 20000.

+0

desupported wurde, was ist Ihr wählen statament? direkt von einem Tisch? –

+0

Nein, ich lese Daten aus Kafka und füge sie in eine Oracle-Tabelle ein. –

+0

eins 2 eins? so können Sie Ihre Daten parallel einfügen –

Antwort

1

Earliar Oracle hat Dokument in Bezug auf Performance-Tuning für JDBC veröffentlicht: Oracle JDBC Memory Management

Hier sind die paar Tipps sind

  1. Optimieren Sie die Stapelgröße, abhängig von Ihrer Oracle-Konfiguration.

  2. Zwischenspeichern Sie die vorbereitete Anweisung und verwenden Sie die gleiche Anweisung für alle Batches (Need Cleanup) oder verwenden Sie Anweisungspooling (Oracle JDBC-Treiber unterstützt es. Siehe das obige Dokument).

  3. Oracle hat einige Performance-Erweiterungen definiert: Performance Extensions. Verwenden Sie anstelle von addBatchsendBatch zur Verbesserung der Batch-Leistung. Siehe Beispiel 23-1 im obigen Dokument.


[1] Oracle Stil batching setExecuteBatch und sendBatch unter Verwendung der in 12