![[z/OS]](../images/ngzos.gif)
Tipps zur Optimierung von JDBC für DB2
WebSphere Application Server verwendet die Zwischenspeicherung vorbereiteter JDBC-Anweisungen als Feature für die Verbesserung der Leistung. Wenn Sie dieses Feature zusammen mit DB2 for z/OS verwenden, müssen Sie die potenziellen Auswirkungen auf die Anzahl verfügbarer DB2-JDBC-Cursorobjekt beachten.
Die Zwischenspeicherung vorbereiteter Anweisungen wirkt sich auf die JDBC-Cursorobjekte in DB2 for OS/390 aus.
Wenn Sie ein ResultSet-Objekt durch Ausführen eines PreparedStatement-Objekts abrufen, wird ein DB2-JDBC-Cursorobjekt an das ResultSet-Objekt gebunden, bis die entsprechende vorbereitete DB2-Anweisung geschlossen wird. Dies geschieht, wenn das DB2-Connection-Objekt aus dem Verbindungspool von WebSphere Application Server freigegeben wird. Aus Anwendungsperspektive werden nacheinander die Ergebnismenge, die vorbereitete Anweisung und die Verbindung geschlossen. Das zugrunde liegende DB2-Connection-Objekt wird jedoch von WebSphere Application Server in den Pool gestellt, das zugrunde liegende DB2-PreparedStatement-Objekt wird vom Anwendungsserver zwischengespeichert, und alle zugrunde liegenden DB2-JDBC-Cursorobjekte, die den ResultSet-Objekten zugeordnet sind, die in diesem PreparedStatement-Objekt erstellt wurden, werden noch nicht freigegeben.
Jedem PreparedStatement-Objekt im Cache können mehrere Ergebnismengen zugeordnet sein. Wenn eine Ergebnismenge geöffnet und selbst nach dem Schließen der Verbindung nicht geschlossen wird, bleibt diese Ergebnismenge der vorbereiteten Anweisung im Cache zugeordnet. Jeder Ergebnismenge ist ein eindeutiger JDBC-Cursor zugeordnet. Dieser Cursor wird von der Anweisung verwaltet und erst dann freigegeben, wenn die vorbereitete Anweisung aus dem Cache von WebSphere Application Server gelöscht wird.
java.sql.SQLException: DB2SQLJJDBCProfile Error: No more JDBC Cursors without hold
Im Folgenden finden Sie veschiedene Vorschläge zur Optimierung von WebSphere Application Server, die Ihnen helfen können, dieses Problem zu vermeiden:
- Verringern Sie den Wert der Einstellung für die Größe des Anweisungscache in der Datenquellendefinition für DB2 for OS/390. Wenn Sie die Größe des Datencaches auf null (0) setzen, werden zwar keine Anweisungen mehr zwischengespeichert, aber es machen sich erhebliche Leistungseinflüsse bemerkbar.
- Verringern Sie den Wert der Verbindungspooleinstellung minConnections in der Datenquellendefinition für DB2 for OS/390.
- Verringern Sie den Wert der Verbindungspooleinstellung Aged Timeout in der Datenquellendefinition für DB2 for OS/390. Diesen Wert sollten Sie jedoch NICHT auf null setzen, weil damit das Alterungszeitlimit inaktiviert wird.