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

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
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
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_nameFROM 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.

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 260652 - Dernière mise à jour : 01/16/2015 20:22:36 - Révision : 3.2

Microsoft SQL Server 7.0 Standard, Microsoft SQL Server 2000 Standard

  • kbnosurvey kbarchive kbmt kbpending kbprb KB260652 KbMtfr
Commentaires