Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie behandelt man große Transaktionen unter Oracle?

Oracle erstellt einen Cursor für jede Ergebnismenge und gibt ihn beim Schließen der Ergebnismenge frei (jdbc ResultSet.close() oder ähnlich). Der Standardwert von 50 geöffneten Cursorn pro Sitzung reicht für jede gut gestaltete Anwendung aus (einmal habe ich es gemessen und im Produktionsmodus stieg es nie über 20).

Sie sollten überprüfen, wie Sie Hibernate dazu bringen, Ergebnismengen nach dem Abrufen zu schließen. Im Allgemeinen kann ich mir nicht vorstellen, was eine Sitzung tun sollte, wenn sie wirklich 1000 offene Cursor erfordert. Ich habe nie gesehen, dass max_open_cursors mehr als 1000 gesetzt hat, also denke ich, dass es auch für schlecht gestaltete Anwendungen ausreicht (aber ... es gibt keine Grenze für Perfektion, nüchtern betrachtet, und ich benutze Hibernate nie).

Jeder Cursor bedeutet etwas Speicher, daher ist das Erhöhen von max_open_cursors keine Problemumgehung zum Nullpreis.