Caching von IBM Data Server Driver for JDBC and SQLJ -Anweisungen
Der IBM® Data Server Driver for JDBC and SQLJ kann einen internen Anweisungscache verwenden, um die Leistung von Java™-Anwendungen durch Caching und Pooling vorbereitete Anweisungen zu verbessern.
Internes Anweisungscaching ist für Verbindungen verfügbar, die IBM Data Server Driver for JDBC and SQLJ type 4 connectivity verwenden, oder für Verbindungen, die IBM Data Server Driver for JDBC and SQLJ type 2 connectivity unter Db2 for z/OS verwenden.
Sie aktivieren das Zwischenspeichern von internen Anweisungen auf eine der folgenden Arten:
- Indem Sie eine der folgenden Eigenschaften auf einen positiven Wert setzen:
- com.ibm.db2.jcc.DB2ConnectionPoolDataSource.maxStatements, für Objekte, die mit der Schnittstelle javax.sql.ConnectionPoolDataSource erstellt werden.
- com.ibm.db2.jcc.DB2XADataSource.maxStatements, für Objekte, die mit der Schnittstelle javax.sql.XADataSource erstellt werden.
- com.ibm.db2.jcc.DB2SimpleDataSource.maxStatements, für Objekte, die mit den Schnittstellen com.ibm.db2.jcc.DB2SimpleDataSource erstellt werden.
- Indem Sie das Merkmal maxStatements in einer URL festlegen und die URL an die Methode DriverManager.getConnection übergeben.
Wenn das Caching interner Anweisungen aktiviert ist, kann der IBM Data Server Driver for JDBC and SQLJ PreparedStatement -Objekte, CallableStatement -Objekte und JDBC-Ressourcen zwischenspeichern, die von SQLJ-Anweisungen verwendet werden, wenn diese Objekte oder Ressourcen logisch geschlossen sind. Wenn Sie die Methode close explizit oder implizit in einer Anweisung aufrufen, schließen Sie die Anweisung logisch.
Die Verwendung einer zuvor zwischengespeicherten Anweisung ist für Anwendungen transparent. Der-Anweisungscache ist für das Leben einer offenen Verbindung vorhanden. Wenn die Verbindung geschlossen wird, löscht der Treiber den Anweisungscache und schließt alle gepoolten Anweisungen.
Eine logisch offene Anweisung wird für das Caching unter einer der folgenden Bedingungen nicht auswählbar:
- In der Anweisung tritt eine Ausnahmebedingung auf.
- Die JDBC 4.0-Methode Statement.setPoolable (false) wird aufgerufen.
Wenn der IBM Data Server Driver for JDBC and SQLJ versucht, eine Anweisung zwischenzuspeichern, und der interne Anweisungscache voll ist, bereinigt der Treiber die am wenigsten verwendete zwischengespeicherte Anweisung und fügt die neue Anweisung ein.
Der interne Anweisungscache wird unter den folgenden Bedingungen gelöscht:
- Es wird eine SET-Anweisung abgesetzt, die sich auf Zielobjekte der SQL-Anweisung auswirkt.
- Eine SET-Anweisung wird ausgeführt, die der IBM Data Server Driver for JDBC and SQLJ nicht erkennt.
- Der IBM Data Server Driver for JDBC and SQLJ erkennt, dass eine Eigenschaft, die Zielobjekte der SQL-Anweisung modifiziert, während der Wiederverwendung der Verbindung geändert wurde. currentSchema ist ein Beispiel für eine Eigenschaft, mit der Zielobjekte einer SQL-Anweisung geändert werden.
In einem Java-Programm können Sie testen, ob der interne Anweisungscache aktiviert ist, indem Sie die Methode DatabaseMetaData.supportsStatementPooling absetzen. Die Methode gibt true zurück, wenn der interne Anweisungscache aktiviert ist.
Der IBM Data Server Driver for JDBC and SQLJ prüft nicht, ob die Definitionen der Zielobjekte von Anweisungen im internen Anweisungscache geändert wurden. Wenn Sie SQL-Datendefinitionssprachenanweisungen in einer Anwendung ausführen, müssen Sie das interne Anweisungscaching für diese Anwendung inaktivieren.
Der interne Anweisungscache erfordert zusätzlichen Speicher. Wenn der Speicher eingeschränkt wird, können Sie die JVM-Größe erhöhen oder den Wert von maxStatements verringern.