Vorbereitetes Caching von Anweisungsmetadaten für den JDBC-Treiber

JDBC-Treiber herunterladen

Dieser Artikel enthält Informationen zu zwei Änderungen, die die Leistung des Treibers verbessern.

Rückgängigmachen der Vorbereitung für vorbereitete Anweisungen in Batchverarbeitung

Ab Version 6.2 wird eine Leistungsverbesserung implementiert, die Server-Roundtrips zu SQL Server minimiert. Zuvor wurde für jede prepareStatement-Anfrage auch ein unprepare-Aufruf gesendet. Jetzt batchierte der Treiber unvorbereitete Abfragen bis zum Schwellenwert ServerPreparedStatementDiscardThreshold, der einen Standardwert von 10 hat.

Hinweis

Benutzer können den Standardwert mit der folgenden Methode ändern: setServerPreparedStatementDiscardThreshold(int value)

Vor Version 6.2 ruft der Treiber immer auf sp_prepexec. In 6.2 oder später ruft der Treiber für die erste Ausführung einer vorbereiteten Anweisung sp_executesql auf, und für den Rest führt er sp_prepexec aus und weist ihm ein Handle zu. Weitere Informationen finden Sie unter PreparedStatement-Metadaten-Caching.

Ab Version 11.2 kann der Treiber, nachdem der anfängliche sp_executesql Aufruf stattgefunden hat, abhängig vom in der sp_prepare Verbindungszeichenfolgeneigenschaft angegebenen Wert entweder sp_prepexec oder prepareMethod für zusätzliche Aufrufe ausführen. Weitere Informationen zum Festlegen der Verbindungseigenschaften finden Sie unter Festlegen von Verbindungseigenschaften.

Hinweis

Benutzer können das Standardverhalten früherer Versionen wiederherstellen, sodass immer sp_prepexec aufgerufen wird, indem sie enablePrepareOnFirstPreparedStatementCall mithilfe der Methode setEnablePrepareOnFirstPreparedStatementCall(boolescher Wert) auf true festlegen.

Liste der neuen, mit dieser Änderung eingeführten APIs für das Rückgängigmachen der Vorbereitung für vorbereitete Anweisungen in Batchverarbeitung

SQLServerConnection Batching aufheben

Neue Methode BESCHREIBUNG
int getDiscardedServerPreparedStatementCount() Gibt die Anzahl der aktuell ausstehenden Unprepare-Aktionen zurück.
void closeUnreferencedPreparedStatementHandles() Erzwingt, dass Anforderungen zum Rückgängigmachen der Vorbereitung für ausstehende verworfene vorbereitete Anweisungen ausgeführt werden.
boolean getEnablePrepareOnFirstPreparedStatementCall() Gibt das Verhalten einer bestimmten Verbindungsinstanz an. „false“ gibt an, dass durch die erste Ausführung sp_executesql aufgerufen und keine Anweisung vorbereitet wird. Wenn eine zweite Ausführung erfolgt, wird sp_prepare oder sp_prepexec aufgerufen und tatsächlich ein Handle für vorbereitete Anweisungen eingerichtet. Bei späteren Ausführungen wird sp_execute aufgerufen. Dadurch ist sp_unprepare nicht mehr für den Abschluss einer vorbereiteten Anweisung erforderlich, falls diese nur einmal ausgeführt wird. Der Standardwert für diese Option kann durch Aufrufen von setDefaultEnablePrepareOnFirstPreparedStatementCall() geändert werden.
void setEnablePrepareOnFirstPreparedStatementCall(boolescher Wert) Legt das Verhalten für eine bestimmte Verbindungsinstanz fest. Wenn der Wert „false“ ist, ruft die erste Ausführung sp_executesql auf und bereitet keine Anweisung vor. Wenn eine zweite Ausführung erfolgt, wird sp_prepare oder sp_prepexec aufgerufen und tatsächlich ein Handle für vorbereitete Anweisungen eingerichtet. Bei späteren Ausführungen wird sp_execute aufgerufen. Dadurch ist sp_unprepare nicht mehr für den Abschluss einer vorbereiteten Anweisung erforderlich, falls diese nur einmal ausgeführt wird.
int getServerPreparedStatementDiscardThreshold() Gibt das Verhalten einer bestimmten Verbindungsinstanz an. Mit dieser Einstellung steuern Sie, wie viele ausstehende Discard-Aktionen (sp_unprepare) pro Verbindung zulässig sind, bevor ein Aufruf ausgeführt wird, um die ausstehenden Handles auf dem Server zu bereinigen. Wenn diese Einstellung <= 1 ist, werden Aktionen zum Rückgängigmachen der Vorbereitung sofort nach Abschluss der vorbereiteten Anweisung ausgeführt. Bei Festlegung auf > "1" werden diese Aufrufe zusammengefasst, um den Aufwand durch zu häufige Anrufe von sp_unprepare zu vermeiden. Der Standardwert für diese Option kann durch Aufrufen von getDefaultServerPreparedStatementDiscardThreshold() geändert werden.
void setServerPreparedStatementDiscardThreshold(int value) Legt das Verhalten für eine bestimmte Verbindungsinstanz fest. Mit dieser Einstellung steuern Sie, wie viele ausstehende Discard-Aktionen (sp_unprepare) pro Verbindung zulässig sind, bevor ein Aufruf ausgeführt wird, um die ausstehenden Handles auf dem Server zu bereinigen. Wenn diese Einstellung <= 1 ist, werden Aktionen zum Rückgängigmachen der Vorbereitung sofort nach Abschluss der vorbereiteten Anweisung ausgeführt. Bei Festlegung auf > 1 werden diese Aufrufe in einem Batch zusammengefasst, um den Aufwand eines zu häufigen Aufrufs von sp_unprepare zu vermeiden.

SQLServerDataSource Vorbereitung aufheben für Batchverarbeitung

Neue Methode BESCHREIBUNG
void setEnablePrepareOnFirstPreparedStatementCall(boolesch enablePrepareOnFirstPreparedStatementCall) Wenn diese Konfiguration den Wert „false“ hat, ruft die erste Ausführung einer vorbereiteten Anweisung sp_executesql auf und bereitet keine Anweisung vor. Wenn eine zweite Ausführung erfolgt, wird sp_prepare oder sp_prepexec aufgerufen und ein Handle für vorbereitete Anweisungen eingerichtet. Bei späteren Ausführungen wird sp_execute aufgerufen. Dadurch ist sp_unprepare nicht mehr für den Abschluss einer vorbereiteten Anweisung erforderlich, falls diese nur einmal ausgeführt wird.
boolean getEnablePrepareOnFirstPreparedStatementCall() Wenn diese Konfiguration „false“ zurückgibt, ruft die erste Ausführung einer vorbereiteten Anweisung sp_executesql auf und bereitet keine Anweisung vor. Wenn eine zweite Ausführung erfolgt, wird sp_prepare oder sp_prepexec aufgerufen und tatsächlich ein Handle für vorbereitete Anweisungen eingerichtet. Bei späteren Ausführungen wird sp_execute aufgerufen. Dadurch ist sp_unprepare nicht mehr für den Abschluss einer vorbereiteten Anweisung erforderlich, falls diese nur einmal ausgeführt wird.
void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) Mit dieser Einstellung steuern Sie, wie viele ausstehende Discard-Aktionen (sp_unprepare) pro Verbindung zulässig sind, bevor ein Aufruf ausgeführt wird, um die ausstehenden Handles auf dem Server zu bereinigen. Wenn diese Einstellung <= 1 ist, werden Aktionen zum Rückgängigmachen der Vorbereitung sofort nach Abschluss der vorbereiteten Anweisung ausgeführt. Bei Festlegung auf > "1" werden diese Aufrufe gebündelt, um den Aufwand für häufige sp_unprepare-Aufrufe zu vermeiden.
int getServerPreparedStatementDiscardThreshold() Mit dieser Einstellung steuern Sie, wie viele ausstehende Discard-Aktionen (sp_unprepare) pro Verbindung zulässig sind, bevor ein Aufruf ausgeführt wird, um die ausstehenden Handles auf dem Server zu bereinigen. Wenn diese Einstellung <= 1 ist, werden Aktionen zum Rückgängigmachen der Vorbereitung sofort nach Abschluss der vorbereiteten Anweisung ausgeführt. Bei Festlegung auf > "1" werden diese Aufrufe zusammengefasst, um den Aufwand durch zu häufige Anrufe von sp_unprepare zu vermeiden.

Zwischenspeicherung von Prepared-Statement-Metadaten

Ab Version 6.4 unterstützt der Microsoft JDBC-Treiber für SQL Server die Zwischenspeicherung vorbereiteter Anweisungen. Wenn vor Version 6.4 eine Bereits vorbereitete und im Cache gespeicherte Abfrage ausgeführt wird, muss das Aufrufen derselben Abfrage nicht erneut vorbereitet werden. Der Treiber sucht im Cache nach der Abfrage, um das Handle zu finden und führt es mit sp_execute aus. Das Zwischenspeichern von Metadaten zu vorbereiteten Anweisungen ist standardmäßig deaktiviert. Rufen Sie zum Aktivieren die folgende Methode für das Verbindungsobjekt auf:

setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0) setDisableStatementPooling(boolean value) //false allows the caching to take place

Beispiel: connection.setStatementPoolingCacheSize(10)connection.setDisableStatementPooling(false).

Liste der neuen, mit dieser Änderung eingeführten APIs für das Zwischenspeichern von Metadaten zu vorbereiteten Anweisungen

SQLServerConnection-Metadaten zwischenspeicherung

Neue Methode BESCHREIBUNG
void setDisableStatementPooling(boolescher Wert) Diese Methode legt das Anweisungspooling auf TRUE oder FALSE fest.
boolean getDisableStatementPooling() Gibt „true“ zurück, wenn das Statement-Pooling deaktiviert ist.
void setStatementPoolingCacheSize(int-Wert) Legt die Größe des Prepared-Statement-Caches für diese Verbindung fest. Ein Wert < 1 bedeutet keinen Cache.
int getStatementPoolingCacheSize() Sie gibt die Größe des Prepared Statement-Caches für diese Verbindung zurück. Ein Wert < 1 bedeutet keinen Cache.
int erhalteAnzahlDerStatementHandleCacheEinträge() Gibt die aktuelle Anzahl von Handles für vorbereitete Anweisungen zurück, die in einem Pool zusammengefasst sind.
boolean isPreparedStatementCachingEnabled() Gibt zurück, ob für diese Verbindung Anweisungspooling aktiviert ist

Zwischenspeichern von SQLServerDataSource-Metadaten

Neue Methode BESCHREIBUNG
void setDisableStatementPooling(boolesch disableStatementPooling) Legt das Anweisungspooling auf „true“ oder „false“ fest.
boolean getDisableStatementPooling() Gibt „true“ zurück, wenn das Statement-Pooling deaktiviert ist.
void setStatementPoolingCacheSize(int statementPoolingCacheSize) // Legt die Größe des Statement-Pooling-Caches fest Legt die Cachegröße des Prepared-Statement-Caches für diese Verbindung fest. Ein Wert < 1 bedeutet keinen Cache.
int getStatementPoolingCacheSize() Sie gibt die Größe des Prepared Statement-Caches für diese Verbindung zurück. Ein Wert < 1 bedeutet keinen Cache.