Oracle 9 - (Wie) Kann ich die Performance erhöhen?

Hallo,

ich habe einen DB-Server mit Oracle 9i laufen und führe dort via Netzwerk SQL-Operationen aus. Nun habe ich hier Performanceunterschiede festgestellt und würde gern mal hören, ob ich da was optimieren kann.

Bei 2.000 einzelnen Insert-Statements (via jdbc mit addBatch und excecuteBatch) dauert jedes einzelne Statement umgerechnet 2,8 ms. Mache ich das Gleiche mit 40.000 Statements, komme ich aber auf 4,2 ms pro Statement. (Ausführung auf der Datenbank (incl. Übertragung zum Server))

Läuft da irgendein Puffer voll, oder warum dieser Zuwachs?

Die Möglichkeit mehrere Tupel in einem Statement einzufügen gibt es ja in Oracle scheinbar nicht. Bleibt noch die Variante mit einem Dummytable, aus welchem ich die Daten mit einem INSERT ALL … SELECT … einfügen könnte, aber dazu müssten die Daten ja schon in der DB liegen, oder?

Wie könnte ich meine Zugriffe optimieren, bzw. wenigstens die 4,2 ms näher an die 2,8 ms heranbringen?

Es handelt sich im Moment noch um sehr einfache Datensätze (4 Spalten VARCHAR2 in zwei Tabellen)

Wäre für jeden Tipp bzw. jede Einschätzung dankbar.

Gruß Taste

Hallo Taste,

mit den Angaben kann man nicht viel anfangen. Ja, es wird eine Grenze geben, wo das asyncrone DB-System erst mal sein Buffer freiräumen muss.

Bei der Interfacebeschreibung ist die Nutzung des SQL-Loader wohl keine Option, oder? Weitere Denkrichtung: Wie häufig führst Du ein Commit aus? Sind Indizes auf der Tabelle vorhanden?

MfG Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Servus,

ich würde hier mal raten, da ich es nicht mit bestimmheit sagen kann, aber evtl. läuft ein Rollback-Segment voll. (?)

Gruß
Andreas

Hi Taste,
bei jeglicher Tuninig Aufgabe gilt es erstmal das Performance Problem einzukreisen.

Bei deinem Scenario würde ich erstmal klären, wo passiert der Performanceeinbruch:

Auf dem Client (vielleicht wird der Speicher knapp und Java versucht alle Nasen lange den Garbage Collector anzuschmeissen)

Im Netzwerk (vielleicht sagt irgendeine Netzwerkkomponente … die beiden Rechner reden so viel und lange miteinander, die bekommen weniger Bandbreite, damit die nicht das ganze Netzwerk blockieren

Die CPU der Datenbank

Der Speicher der Datenbank

Das I/O Subsystem der Datenbank

Wenn du das so weit eingegrenzt hast kann man schauen wie man das schneller bekommt.

Zum Thema COMMITs: überflüssige COMMITs können in der Tat eine Ursache für Performanceverschlechterung sein, da dadurch die Datenbank zusätzliche Daten wegschreiben muss und diese auch defenitiv auf die Platte schreibt und nicht nur in einen Cache.

Ein anderer Klassiker wäre das nicht verwenden von Bindvariablen, d.h. du solltest unbedingt Prepared Statements verwenden und nicht etwa die SQL-Statements jedes mal neu zusammenbauen.