PRB : Nested Loop Join That Uses A «BOOKMARK LOOKUP.. .WITH PREFETCH» peut maintenir verrous plus de temps

Traductions disponibles Traductions disponibles
Numéro d'article: 260652 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Symptômes

Si un plan d'exécution utilise une jointure de boucle imbriquées et une recherche de signet, utilise la clause WITH PREFETCH, les verrous sont maintenus pendant la durée des jointures de boucle imbriquée déterminant les signets qualifiants. Une fois le signet est utilisé pour extraire les données des colonnes en suspens et ces données sont placées dans la mémoire tampon de sortie, le verrou est libéré puis. Ce comportement peut entraîner le blocage des autres identificateurs de processus système (SPID).

Contournement

Si vous modifiez l'indicateur de jointure de boucle HASH ou MERGE, le blocage ne se produit.

Plus d'informations

Ce comportement peut être illustré par dans l'exemple suivant :
SELECT c.mstr_acct, c.last_name_m, c.first_name, c.name_prefix, c.company_name
FROM tickler a 
 INNER LOOP JOIN member b    ON a.mbr_acct = b.mbr_acct 
 INNER LOOP JOIN person c    ON b.mstr_acct = c.mstr_acct 
WHERE a.tickler_code = 'SPIRITEXT' 
				
le SHOWPLAN pour la requête précédente suit de sortie :
StmtText                                                                                                                                            
---------------------------------------------------------------------------------------------------------------------------------------------
  |--Bookmark Lookup(BOOKMARK:([Bmk1002]), OBJECT:([TestLoopJoin].[dbo].[person] AS [c]) WITH PREFETCH)
       |--Nested Loops(Inner Join)
            |--Nested Loops(Inner Join)
            |    |--Index Seek(OBJECT:([TestLoopJoin].[dbo].[tickler].[tickler_code] AS [a]), SEEK:([a].[tickler_code]='SPIRITEXT') ORDERED)
            |    |--Clustered Index Seek(OBJECT:([TestLoopJoin].[dbo].[member].[pk_member] AS [b]), SEEK:([b].[mbr_acct]=[a].[mbr_acct])  ORDERED)
            |--Index Seek(OBJECT:([TestLoopJoin].[dbo].[person].[pk_person] AS [c]), SEEK:([c].[mstr_acct]=[b].[mstr_acct]) ORDERED)
				
le comportement de verrouillage est facilement observé à partir d'une autre connexion effectue une mise à jour sur les premières lignes sélectionnées dans la table. Notez que l'instruction UPDATE est bloqué jusqu'à ce que toutes les recherches de signet pour l'instruction SELECT sont traitées et les lignes sont envoyées au client. Recherche de signet

L'opérateur physique et logique Bookmark Lookup utilise un signet (ID de ligne ou clé de cluster) pour rechercher la ligne correspondante dans la table ou d'un index ordonné en clusters. La colonne Argument contient l'étiquette de signet utilisée pour rechercher la ligne dans la table ou d'un index ordonné en clusters. La colonne Argument contient également le nom de la table ou d'un index ordonné en clusters dans lequel la ligne est recherchée. Si la clause WITH PREFETCH apparaît dans la colonne argument, le processeur de requêtes a déterminé qu'il est optimale à utiliser asynchrone lecture anticipée (read-ahead) lors de la recherche de signets dans la table ou l'index ordonné en clusters.

Propriétés

Numéro d'article: 260652 - Dernière mise à jour: vendredi 17 octobre 2003 - Version: 3.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 7.0 Standard
  • Microsoft SQL Server 2000 Standard
Mots-clés : 
kbmt kbpending kbprb KB260652 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 260652
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com