Symptômes
Supposez que vous utilisez un pilote ODBC SQLNCLI11. dll pour accéder à Microsoft SQL Server 2012 ou à SQL Server 2014 dans une application. Lorsque vous utilisez le curseur serveur et la fonction SQLFetch/ SQLGetData pour accéder à des données de type BLOB (Binary volumineux Object) dans SQL Server, un problème de performance se produit en particulier pour les types de données volumineux (par exemple, varbinary (max) ou varchar (max).
Cause
Il s’agit d’un problème de conception de l’implémentation de la fonction SQLFetch/ SQLGetData dans le pilote ODBC SQL Server 2012. Lorsque la requête utilise un curseur de serveur, le pilote ODBC appelle sp_cursorfetch lors de l’implémentation SQLFetch , et le serveur envoie tout le BLOB au client. Ensuite, lorsque SQLGetData est exécuté, sp_cursor rétablit l’objet BLOB. Cela affecte sensiblement les performances des types de données volumineux tels que varbinary (max) ou varchar (max).
Résolution
Informations de mise à jour cumulative
La nouvelle implémentation appelle sp_cursoroption pour obtenir TEXTPTR_ONLY avant le sp_cursorfetch, puis appelle SP_CURSOROPTION pour la remettre à TextData avant la sp_cursor. Cela peut améliorer les performances. Le problème a été résolu dans la mise à jour cumulative suivante de SQL Server.
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs et les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Nous vous recommandons de télécharger et d’installer les dernières mises à jour cumulatives pour SQL Server :
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.