CORRECTIF : Lorsque vous exécutez une requête qui utilise l’indicateur de table NOLOCK dans SQL Server 2005 ou SQL Server 2008 pour extraire les données BLOB, la requête s’exécute très lentement

Microsoft distribue les correctifs de Microsoft SQL Server 2005 en tant que fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus dans la précédente de SQL Server 2005 version du correctif.
Microsoft distribue les correctifs de Microsoft SQL Server 2008 en tant que fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus dans la précédente 2008 de SQL Server version du correctif.

Symptômes

Vous avez une requête qui utilise l’indicateur de table NOLOCK dans Microsoft SQL Server 2005 ou Microsoft SQL Server 2008. La requête lit des données d’objet binaire volumineux (BLOB) de l’un des types de données suivants à partir d’une table de grande taille :
  • Le type de données texte
  • Le type de données nText
  • Le type de données Image
Lorsque vous exécutez la requête, la requête s’exécute très lentement. Si vous examinez l’activité du disque qui génère de la requête, vous remarquez que le nombre de lectures logiques est très élevé.

Remarque Pour afficher les activités de disque, exécutez la requête à l’aide de la clause SET STATISTICS IO ON.

Cause

Lorsque la requête qui utilise l’indicateur de table NOLOCK lit les données BLOB, SQL Server vérifie que chaque page de l’objet BLOB est affectée en examinant le plan d’allocation index (IAM) correspondante. La page IAM est une liste liée de pages d’allocation. Chaque page IAM peut contenir environ 4 Go de données (taille de page de 8 Ko * 8 pages * 64 000 extensions). Si l’objet est importante, l’opération de vérification peut conduire à des lectures logiques excessives.

Par exemple, vous avez un objet volumineux est mappé à un groupe de fichiers. La taille totale des fichiers dans le groupe de fichiers est de 700 Go. Dans ce cas, la page IAM de cet objet peut contenir jusqu'à 175 pages. Si vous exécutez maintenant une requête sur cet objet à l’aide de l’indicateur de table NOLOCK, et la requête accède à 10 000 pages BLOB, le nombre de lectures logiques qui sont liés à des pages IAM sera 175 * 10 000 = 1,750,000 dans le pire des cas. Si SQL Server détecte que la page IAM correspondante en parcourant la moitié de la liste liée, le nombre moyen de lectures logiques qui sont liés à des pages IAM sera environ de 1,750,000 / 2 = 875,000. Il s’agit de trop élevée une surcharge occasionnées par une requête accéder aux 10 000 pages BLOB.

Résolution

Informations mises à jour cumulatives pour SQL Server 2005

Le correctif de ce problème a été publié dans à jour Cumulative 3 pour SQL Server 2005 Service Pack 3. Pour plus d’informations sur l’obtention de ce package de mise à jour cumulative pour SQL Server 2005, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
967909 Cumulative mise à jour 3 pour Microsoft SQL Server 2005 Service Pack 3
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente de SQL Server 2005 version du correctif. Nous vous recommandons l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
960598 le SQL Server 2005 versions publiées après la publication de SQL Server 2005 Service Pack 3

Informations mises à jour cumulatives pour SQL Server 2008

Le correctif de ce problème a été publié dans les 5 mise à jour Cumulative pour SQL Server 2008. Pour plus d’informations sur l’obtention de ce package de mise à jour cumulative pour SQL Server 2008, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
969531 Cumulative mise à jour 5 pour SQL Server 2008
Remarque Les versions étant cumulatives, chaque nouvelle version du correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente version du correctif de SQL Server 2008. Nous vous recommandons l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
956909 the SQL Server versions 2008 publiées après SQL Server 2008

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Le correctif de ce problème utilise le cache de la page IAM pour déterminer rapidement si une BLOB page est réellement allouée.

Pour plus d’informations sur les fichiers modifiés et pour plus d’informations sur les conditions requises pour appliquer le package de mise à jour cumulative qui contient le correctif qui est décrit dans cet article de la Base de connaissances Microsoft, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
967909 Cumulative mise à jour 3 pour Microsoft SQL Server 2005 Service Pack 3
Pour plus d’informations sur les fichiers modifiés et pour plus d’informations sur les conditions requises pour appliquer le package de mise à jour cumulative qui contient le correctif qui est décrit dans cet article de la Base de connaissances Microsoft, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
969531 Cumulative mise à jour 5 pour SQL Server 2008

Références

Pour plus d’informations sur la liste des versions disponibles après SQL Server 2005 Service Pack 3, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

960598 le SQL Server 2005 versions publiées après la publication de SQL Server 2005 Service Pack 3

Pour plus d’informations sur la liste des versions disponibles après SQL Server 2008, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

956909 the SQL Server versions 2008 publiées après SQL Server 2008

Pour plus d’informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

935897 un modèle de service incrémentiel est disponible auprès de l’équipe SQL Server pour proposer des correctifs pour les problèmes signalés

Pour plus d’informations sur le schéma d’appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

Packages de mises à jour 822499 nouveau schéma d’appellation pour les logiciels de Microsoft SQL Server

Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft
Propriétés

ID d'article : 961049 - Dernière mise à jour : 14 janv. 2017 - Révision : 1

Commentaires