Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce informazioni su due modifiche che migliorano le prestazioni del driver.
Raggruppamento in batch della depreparazione degli statement preparati
A partire dalla versione 6.2, viene implementato un miglioramento delle prestazioni che riduce al minimo i round trip del server a SQL Server. In precedenza, per ogni query prepareStatement veniva inviata anche una chiamata a unprepare. Ora, il driver esegue il batch di query nonprepare fino alla soglia ServerPreparedStatementDiscardThreshold, che ha un valore predefinito pari a 10.
Nota
Gli utenti possono modificare il valore predefinito con il metodo seguente: setServerPreparedStatementDiscardThreshold(int value)
Prima della versione 6.2, il driver chiama sempre sp_prepexec. Nella versione 6.2 e successive, per la prima esecuzione di un'istruzione preparata, il driver chiama sp_executesql e per le successive esegue sp_prepexec assegnandole un handle. Per altre informazioni, vedere Memorizzazione nella cache dei metadati PreparedStatement.
A partire dalla versione 11.2, dopo la chiamata iniziale sp_executesql , il driver può eseguire sp_prepare o sp_prepexec per chiamate aggiuntive, a seconda del valore specificato nella proprietà della prepareMethod stringa di connessione. Per altre informazioni, vedere Impostazione delle proprietà di connessione.
Nota
Gli utenti possono modificare il comportamento predefinito delle versioni precedenti che chiamavano sempre sp_prepexec impostando enablePrepareOnFirstPreparedStatementCall su true usando il metodo setEnablePrepareOnFirstPreparedStatementCall(boolean value)
Elenco delle nuove API introdotte con questa modifica per l'esecuzione in batch dell'operazione di annullamento della preparazione per le istruzioni preparate
Annullamento della preparazione dei batch in SQLServerConnection
| Nuovo metodo | Descrizione |
|---|---|
| ```java // Restituisce il conteggio degli statement preparati dal server scartati int getDiscardedServerPreparedStatementCount() ``` | Restituisce il numero di azioni di depreparazione attualmente in sospeso. |
| void closeUnreferencedPreparedStatementHandles() // chiude gli handle PreparedStatement non referenziati | Forza l'esecuzione delle richieste di depreparazione per eventuali istruzioni preparate scartate ancora in sospeso. |
| boolean getEnablePrepareOnFirstPreparedStatementCall() | Restituisce il comportamento per un'istanza di connessione specifica. Se è false, alla prima esecuzione chiama sp_executesql e non prepara uno statement SQL. Se avviene una seconda esecuzione, chiama sp_prepare o sp_prepexec e imposta effettivamente un handle di prepared statement. Le esecuzioni successive chiamano sp_execute. Questo comportamento elimina la necessità di usare sp_unprepare alla chiusura dell'istruzione preparata se l'istruzione viene eseguita una sola volta. L'impostazione predefinita per questa opzione può essere modificata chiamando setDefaultEnablePrepareOnFirstPreparedStatementCall(). |
| void setEnablePrepareOnFirstPreparedStatementCall(valore booleano) | Specifica il comportamento per un'istanza di connessione specifica. Se il valore è false, la prima esecuzione chiama sp_executesql e non prepara un'istruzione SQL. Se si verifica una seconda esecuzione, chiama sp_prepare o sp_prepexec e configura un handle dell'istruzione preparata. Le esecuzioni successive chiamano sp_execute. Questo comportamento elimina la necessità di usare sp_unprepare alla chiusura dell'istruzione preparata se l'istruzione viene eseguita una sola volta. |
| int getServerPreparedStatementDiscardThreshold() | Restituisce il comportamento per un'istanza di connessione specifica. Questa impostazione consente di controllare il numero di azioni di rimozione (sp_unprepare) in sospeso che possono essere presenti per ogni connessione prima che venga eseguita una chiamata per pulire gli handle in sospeso nel server. Se l'impostazione è <= 1, le azioni di depreparazione vengono eseguite immediatamente alla chiusura dell'istruzione preparata. Se impostata su > 1, queste chiamate vengono raggruppate per evitare il sovraccarico delle chiamate sp_unprepare troppo spesso. L'impostazione predefinita per questa opzione può essere modificata chiamando getDefaultServerPreparedStatementDiscardThreshold(). |
| void setServerPreparedStatementDiscardThreshold(int value) | Specifica il comportamento per un'istanza di connessione specifica. Questa impostazione controlla quante operazioni di scarto (sp_unprepare) in sospeso possono esserci per connessione prima che venga eseguita una chiamata per ripulire gli handle in sospeso sul server. Se l'impostazione è <= 1, le azioni di depreparazione vengono eseguite immediatamente alla chiusura dello statement preparato. Se impostata su > 1, queste chiamate vengono raggruppate per evitare sovraccarichi di chiamata sp_unprepare troppo spesso. |
SQLServerDataSource annullamento preparazione batch
| Nuovo metodo | Descrizione |
|---|---|
| void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) | Se questa configurazione è false, la prima esecuzione di un'istruzione preparata chiama sp_executesql e non prepara alcuna istruzione. Se si verifica una seconda esecuzione, chiama sp_prepare o sp_prepexec e imposta un handle di istruzione preparato. Le esecuzioni successive chiamano sp_execute. Questo comportamento elimina la necessità di chiudere l'istruzione preparata con sp_unprepare se l'istruzione viene eseguita una sola volta. |
| boolean getEnablePrepareOnFirstPreparedStatementCall() | Se questa configurazione restituisce false, la prima esecuzione di un'istruzione preparata chiama sp_executesql senza preparare alcuna istruzione. Se si verifica una seconda esecuzione, chiama sp_prepare o sp_prepexec e configura un handle dell'istruzione preparata. Le esecuzioni successive richiamano sp_execute. Questo comportamento elimina la necessità di chiudere l'istruzione preparata con sp_unprepare se l'istruzione viene eseguita una sola volta. |
| void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) | Questa impostazione consente di controllare il numero di azioni di rimozione (sp_unprepare) in sospeso che possono essere presenti per ogni connessione prima che venga eseguita una chiamata per pulire gli handle in sospeso nel server. Se l'impostazione è <= 1, le operazioni di depreparazione vengono eseguite immediatamente alla chiusura dell'istruzione preparata. Se impostato su > 1, queste chiamate vengono raggruppate per evitare il sovraccarico delle chiamate sp_unprepare troppo spesso |
| int getServerPreparedStatementDiscardThreshold() | Questa impostazione controlla quante operazioni di scarto (sp_unprepare) in sospeso sono consentite per connessione prima che venga eseguita una chiamata per ripulire gli handle in sospeso sul server. Se l'impostazione è <= 1, le operazioni di depreparazione vengono eseguite immediatamente alla chiusura dell'istruzione preparata. Se impostata su > 1, queste chiamate vengono raggruppate per evitare il sovraccarico delle chiamate sp_unprepare troppo spesso. |
Memorizzazione nella cache dei metadati delle istruzioni preparate
A partire dalla versione 6.4, Microsoft JDBC Driver per SQL Server supporta la memorizzazione nella cache delle istruzioni preparate. Prima della versione 6.4, se viene eseguita una query già preparata e archiviata nella cache, la chiamata alla stessa query non richiede di nuovo la preparazione. Il driver cerca la query nella cache per trovare l'handle ed eseguirla con sp_execute.
La memorizzazione nella cache dei metadati delle istruzioni preparate è disabilitata per impostazione predefinita. Per abilitarla, chiamare il metodo seguente sull'oggetto connessione:
setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0)
setDisableStatementPooling(boolean value) //false allows the caching to take place
Ad esempio: connection.setStatementPoolingCacheSize(10)connection.setDisableStatementPooling(false)
Elenco delle nuove API introdotte con questa modifica, per la memorizzazione nella cache dei metadati delle istruzioni preparate
Memorizzazione nella cache dei metadati di SQLServerConnection
| Nuovo metodo | Descrizione |
|---|---|
| void setDisableStatementPooling(valore booleano) | Imposta il pooling dell'istruzione su true o false. |
| boolean getDisableStatementPooling() | Restituisce vero se il pooling delle istruzioni è disabilitato. |
| void setStatementPoolingCacheSize(int value) | Specifica le dimensioni della cache delle istruzioni preparate per questa connessione. Un valore < 1 indica che non è disponibile alcuna cache. |
| int getStatementPoolingCacheSize() | Restituisce la dimensione della cache delle istruzioni preparate per questa connessione. Un valore < 1 indica che non è disponibile alcuna cache. |
| int getStatementHandleCacheEntryCount() | Restituisce il numero attuale di handle di istruzioni preparate nel pool. |
| boolean isPreparedStatementCachingEnabled() | Indica se il pooling delle istruzioni è abilitato o meno per questa connessione. |
Memorizzazione nella cache dei metadati di SQLServerDataSource
| Nuovo metodo | Descrizione |
|---|---|
| void setDisableStatementPooling(boolean disableStatementPooling) | Imposta il pooling delle istruzioni su true o false |
| boolean getDisableStatementPooling() | Restituisce true se il pooling delle istruzioni è disabilitato. |
| void setStatementPoolingCacheSize(int statementPoolingCacheSize) // Imposta la dimensione della cache di pooling delle dichiarazioni | Specifica la dimensione della cache delle istruzioni preparate per questa connessione. Un valore < 1 indica che non è disponibile alcuna cache. |
| int getStatementPoolingCacheSize() | Restituisce la dimensione della cache degli statement preparati per questa connessione. Un valore < 1 indica che non è disponibile alcuna cache. |