Préparation de la mise en cache des métadonnées d'instruction pour le pilote JDBC
Cet article fournit des informations sur les deux changements mis en œuvre pour améliorer les performances du pilote.
Traitement par lot d’instructions d’annulation d’instructions préparées
Depuis la version 6.1.6-preview, une amélioration des performances a été mise en œuvre en minimisant les allers-retours du serveur vers SQL Server. Auparavant, pour chaque requête prepareStatement, un appel à une instruction d’annulation était également envoyé. À présent, le pilote traite par lot les requêtes d’annulation jusqu’au seuil « ServerPreparedStatementDiscardThreshold », qui a une valeur par défaut de 10.
Notes
Les utilisateurs peuvent modifier la valeur par défaut à l’aide de la méthode suivante : setServerPreparedStatementDiscardThreshold(int value)
Autre modification introduite à partir de 6.1.6-preview : avant cette version, le pilote appellait toujours sp_prepexec
. À présent, pour la première exécution d’une instruction préparée, le pilote appelle sp_executesql
et, pour le reste, il exécute sp_prepexec
et lui affecte un descripteur. Pour plus d’informations, cliquez ici.
À partir de la version 11.2, après l’appel initial sp_executesql
, le pilote peut exécuter sp_prepare
ou sp_prepexec
pour des appels supplémentaires, en fonction de la valeur spécifiée dans la propriété de la chaîne de connexion prepareMethod
. Pour plus d'informations, consultez Définition des propriétés de connexion.
Notes
Les utilisateurs peuvent modifier le comportement par défaut des versions précédentes qui appellent toujours sp_prepexec
en affectant à enablePrepareOnFirstPreparedStatementCall la valeur true à l’aide de la méthode suivante : setEnablePrepareOnFirstPreparedStatementCall(boolean value)
Liste des nouvelles API introduites avec cette modification en vue du traitement par lot d’instructions Unprepare pour des instructions préparées
SQLServerConnection
Nouvelle méthode | Description |
---|---|
int getDiscardedServerPreparedStatementCount() | Retourne le nombre d’actions d’annulation actuellement en suspens. |
void closeUnreferencedPreparedStatementHandles() | Force l’exécution des demandes d’annulation pour les instructions préparées ignorées en suspens. |
boolean getEnablePrepareOnFirstPreparedStatementCall() | Retourne le comportement d’une instance de connexion spécifique. Si la valeur est false, la première exécution appelle sp_executesql et ne prépare pas d’instruction. Si une deuxième exécution se produit, elle appelle sp_prepare ou sp_prepexec et définit en fait un descripteur d’instruction préparé. Les exécutions ultérieures appellent sp_execute . Ce comportement évite d’utiliser sp_unprepare lors de la fermeture de l’instruction préparée si l’instruction n’est exécutée qu’une seule fois. La valeur par défaut de cette option peut être modifiée en appelant setDefaultEnablePrepareOnFirstPreparedStatementCall(). |
void setEnablePrepareOnFirstPreparedStatementCall(boolean value) | Spécifie le comportement d’une instance de connexion spécifique. Si la valeur est false, la première exécution appelle sp_executesql et ne prépare pas d’instruction. Si une deuxième exécution se produit, elle appelle sp_prepare ou sp_prepexec et définit en fait un descripteur d’instruction préparé. Les exécutions ultérieures appellent sp_execute . Ce comportement évite d’utiliser sp_unprepare lors de la fermeture de l’instruction préparée si l’instruction n’est exécutée qu’une seule fois. |
int getServerPreparedStatementDiscardThreshold() | Retourne le comportement d’une instance de connexion spécifique. Ce paramètre contrôle le nombre d’actions d’abandon en attente (sp_unprepare ) qu’il peut y avoir par connexion avant l’exécution d’un appel pour nettoyer les handles en attente sur le serveur. Si le paramètre est <= 1, les actions d’annulation de la préparation sont exécutées immédiatement à la fermeture de l’instruction préparée. S’il est défini sur {@literal >} 1, ces appels sont regroupés pour éviter la surcharge liée aux appels trop fréquents de sp_unprepare . La valeur par défaut de cette option peut être modifiée en appelant getDefaultServerPreparedStatementDiscardThreshold(). |
void setServerPreparedStatementDiscardThreshold(int value) | Spécifie le comportement d’une instance de connexion spécifique. Ce paramètre contrôle le nombre d’actions d’abandon en attente (sp_unprepare ) qu’il peut y avoir par connexion avant l’exécution d’un appel pour nettoyer les handles en attente sur le serveur. Si le paramètre est <= 1, les actions d’annulation de la préparation sont exécutées immédiatement à la fermeture de l’instruction préparée. S’il est défini sur > 1, ces appels sont regroupés pour éviter la surcharge liée aux appels trop fréquents de sp_unprepare . |
SQLServerDataSource
Nouvelle méthode | Description |
---|---|
void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) | Si cette configuration a la valeur false, la première exécution d’une instruction préparée appelle sp_executesql et ne prépare pas d’instruction. Si une deuxième exécution se produit, elle appelle sp_prepare ou sp_prepexec et définit en fait un descripteur d’instruction préparé. Les exécutions ultérieures appellent sp_execute . Ce comportement évite d’utiliser sp_unprepare lors de la fermeture de l’instruction préparée si l’instruction n’est exécutée qu’une seule fois. |
boolean getEnablePrepareOnFirstPreparedStatementCall() | Si cette configuration retourne la valeur false, la première exécution d’une instruction préparée appelle sp_executesql et ne prépare pas d’instruction. Si une deuxième exécution se produit, elle appelle sp_prepare ou sp_prepexec et définit en fait un descripteur d’instruction préparé. Les exécutions ultérieures appellent sp_execute . Ce comportement évite d’utiliser sp_unprepare lors de la fermeture de l’instruction préparée si l’instruction n’est exécutée qu’une seule fois. |
void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) | Ce paramètre contrôle le nombre d’actions d’abandon en attente (sp_unprepare ) qu’il peut y avoir par connexion avant l’exécution d’un appel pour nettoyer les handles en attente sur le serveur. Si le paramètre est <= 1, les actions d’annulation de la préparation sont exécutées immédiatement à la fermeture de l’instruction préparée. S’il est défini sur {@literal >} 1, ces appels sont regroupés pour éviter la surcharge liée aux appels trop fréquents de sp_unprepare |
int getServerPreparedStatementDiscardThreshold() | Ce paramètre contrôle le nombre d’actions d’abandon en attente (sp_unprepare ) qu’il peut y avoir par connexion avant l’exécution d’un appel pour nettoyer les handles en attente sur le serveur. Si le paramètre est <= 1, les actions d’annulation de la préparation sont exécutées immédiatement à la fermeture de l’instruction préparée. S’il est défini sur {@literal >} 1, ces appels sont regroupés pour éviter la surcharge liée aux appels trop fréquents de sp_unprepare . |
Mise en cache des métadonnées de l’instruction préparée
Depuis la version 6.3.0-preview, le pilote Microsoft JDBC Driver pour SQL Server prend en charge la mise en cache des instructions préparées. Avant la version 6.3.0-preview, si un utilisateur exécutait une requête déjà préparée et mise en cache, l’appel de cette même requête n’entraînait pas sa préparation. À présent, le pilote recherche la requête dans le cache, identifie le descripteur, puis exécute la requête avec sp_execute
.
La mise en cache des métadonnées d'instruction préparée est désactivée par défaut. Pour l’activer, vous devez appeler la méthode suivante sur l’objet de connexion :
setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0)
setDisableStatementPooling(boolean value) //false allows the caching to take place
Par exemple : connection.setStatementPoolingCacheSize(10)
connection.setDisableStatementPooling(false)
Liste des nouvelles API introduites avec cette modification en vue de la mise en cache des métadonnées d'instruction préparée
SQLServerConnection
Nouvelle méthode | Description |
---|---|
void setDisableStatementPooling(boolean value) | Définit le regroupement d’instructions sur true ou false. |
boolean getDisableStatementPooling() | Retourne la valeur true si le regroupement d’instructions est désactivé. |
void setStatementPoolingCacheSize(int value) | Spécifie la taille du cache d’instructions préparées pour cette connexion. Une valeur inférieure à 1 signifie aucun cache. |
int getStatementPoolingCacheSize() | Retourne la taille du cache d’instructions préparées pour cette connexion. Une valeur inférieure à 1 signifie aucun cache. |
int getStatementHandleCacheEntryCount() | Retourne le nombre actuel de handles d’instruction préparée regroupés. |
boolean isPreparedStatementCachingEnabled() | Indique si le regroupement d’instructions est activé ou non pour cette connexion. |
SQLServerDataSource
Nouvelle méthode | Description |
---|---|
void setDisableStatementPooling(boolean disableStatementPooling) | Définit le regroupement d’instructions sur true ou false |
boolean getDisableStatementPooling() | Retourne la valeur true si le regroupement d’instructions est désactivé. |
void setStatementPoolingCacheSize(int statementPoolingCacheSize) | Spécifie la taille du cache d’instructions préparées pour cette connexion. Une valeur inférieure à 1 signifie aucun cache. |
int getStatementPoolingCacheSize() | Retourne la taille du cache d’instructions préparées pour cette connexion. Une valeur inférieure à 1 signifie aucun cache. |
Voir aussi
Amélioration des performances et de la fiabilité avec le pilote JDBC