PRB: Nested Loop-Verknüpfung, die A "BOOKMARK LOOKUP.. ...with PREFETCH" kann mehr Sperren warten

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 260652 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Wenn ein Ausführungsplan, verwendet eine geschachtelte Schleife Verknüpfung und eine Lesezeichensuche, die die WITH PREFETCH-Klausel verwendet werden die Sperren aufrechterhalten, für die Dauer der die nested Loops-Verknüpfungen qualifizierenden Lesezeichen festlegen. Nachdem die Textmarke, die zum Abrufen der ausstehenden Spaltendaten verwendet wird und die Daten in den Ausgabepuffer eingefügt, wird die Sperre aufgehoben. Dieses Verhalten kann zum Sperren von anderen System Prozess-Ids (Spids) führen.

Abhilfe

Wenn Sie den Verknüpfungshinweis von LOOP HASH oder MERGE zu ändern, tritt die Blockierung nicht auf.

Weitere Informationen

Dieses Verhalten kann mithilfe des folgenden Beispiels veranschaulicht:
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' 
				
der SHOWPLAN für die vorherige Abfrage folgende Ausgabe:
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)
				
das Sperrverhalten durch Starten von einer anderen Verbindung, die eine UPDATE auf die ersten Zeilen aus der Tabelle ausgewählt werden führt sofort eingehalten wird. Beachten Sie, dass die UPDATE blockiert wird, bis alle Lesezeichen-Lookups für die SELECT-Anweisung verarbeitet und die Zeilen an den Client gesendet werden. Lesezeichen-Suche

Die Bookmark Lookup-logische und physische Operator verwendet ein Lesezeichen (Zeilen-ID oder Gruppierungsschlüssel), um die entsprechende Zeile in der Tabelle oder im gruppierten Index zu suchen. Die Argument-Spalte enthält die Textmarke Beschriftung verwendet, um die Zeile in der Tabelle oder im gruppierten Index zu suchen. Die Argument-Spalte enthält auch den Namen der Tabelle oder gruppierten Index in dem die Zeile gesucht wird. Wenn die WITH PREFETCH-Klausel in der Argument-Spalte angezeigt wird, hat der Abfrageprozessor festgestellt, dass Lesezeichen in der Tabelle oder im gruppierten Index Optimalerweise mit asynchronem prefetching (Read-ahead).

Eigenschaften

Artikel-ID: 260652 - Geändert am: Freitag, 17. Oktober 2003 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
Keywords: 
kbmt kbpending kbprb KB260652 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 260652
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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