Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article fournit des informations sur deux modifications qui améliorent les performances du pilote.
Traitement par lot d’instructions d’annulation d’instructions préparées
À compter de la version 6.2, une amélioration des performances est implémentée, ce qui réduit 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 a traité par lots les requêtes "unprepare" jusqu’au seuil ServerPreparedStatementDiscardThreshold, qui a une valeur par défaut de 10.
Notes
Les utilisateurs peuvent modifier la valeur par défaut avec la méthode suivante : setServerPreparedStatementDiscardThreshold(int value)
Avant la version 6.2, le pilote appelle toujours sp_prepexec. Dans la version 6.2 et ultérieures, 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 handle. Pour plus d’informations, consultez la mise en cache des métadonnées PrepareStatement.
À compter de la version 11.2, après l'appel initial sp_executesql, le pilote peut exécuter soit sp_prepare soit 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 dépréparation du lot
| Nouvelle méthode | Description |
|---|---|
| int getDiscardedServerPreparedStatementCount() // Retourne le nombre de déclarations préparées de serveur écartées | 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_prepexecet 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(valeur boolean) | 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_prepexecet 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. Lorsqu’ils sont définis > sur 1, ces appels sont regroupés par lots pour éviter la surcharge d’appel sp_unprepare trop souvent. 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. Lorsqu’ils sont définis > sur 1, ces appels sont regroupés par lots pour éviter la surcharge d’appel sp_unprepare trop souvent. |
SQLServerDataSource désassembler le traitement par lots
| 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 configure un handle d’instruction préparé. Les exécutions ultérieures appellent sp_execute. Ce comportement élimine la nécessité de sp_unprepare fermer 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_prepexecet définit en fait un descripteur d’instruction préparé. Les exécutions ultérieures appellent sp_execute. Ce comportement élimine la nécessité de sp_unprepare fermer 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. Lorsqu’ils sont définis sur > 1, ces appels sont regroupés par lots pour éviter la surcharge d’appel sp_unprepare trop souvent |
| 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. Lorsqu’ils sont définis > sur 1, ces appels sont regroupés par lots pour éviter la surcharge d’appel sp_unprepare trop souvent. |
Mise en cache des métadonnées de l’instruction préparée
À compter de la version 6.4, le pilote Microsoft JDBC pour SQL Server prend en charge la mise en cache des instructions préparées. Avant la version 6.4, si une requête est exécutée qui est déjà préparée et stockée dans le cache, l’appel de la même requête ne nécessite pas une nouvelle préparation. Le pilote recherche la requête dans le cache pour trouver le handle et l’exécute 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, appelez 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
Mise en cache des métadonnées SQLServerConnection
| Nouvelle méthode | Description |
|---|---|
| void setDisableStatementPooling(valeur booléenne) | 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 < 1 signifie qu’aucun cache n’est utilisé. |
| int getStatementPoolingCacheSize() | Retourne la taille du cache d’instructions préparées pour cette connexion. Une valeur < 1 signifie aucun cache. |
| int getStatementHandleCacheEntryCount() | Retourne le nombre actuel de handles d’instruction préparée regroupés. |
| boolean obtenirLaMiseEnCacheDesInstructionsPréparéesActivée() | Indique si le regroupement d’instructions est activé ou non pour cette connexion. |
Mise en cache des métadonnées SQLServerDataSource
| Nouvelle méthode | Description |
|---|---|
| void définirDésactiverPoolRequêtes(boolean désactiverPoolRequêtes) | Définit le regroupement d’instructions sur true ou false |
| booléen 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 < 1 indique l’absence de cache. |
| int getStatementPoolingCacheSize() | Retourne la taille du cache d’instructions préparées pour cette connexion. Une valeur < 1 signifie aucun cache. |
Voir aussi
Amélioration des performances et de la fiabilité du pilote JDBCPerformances des paramètres des instructions préparées