PRB: Anidados combinación de bucle que utiliza un "BOOKMARK LOOKUP.. .WITH PREFETCH" puede mantener más bloqueos

Seleccione idioma Seleccione idioma
Id. de artículo: 260652 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Si un plan de ejecución utiliza una combinación de bucle de Nested y una búsqueda de marcador, utiliza la cláusula WITH PREFETCH, los bloqueos se mantienen durante la de las uniones de bucle anidado determinar los marcadores de calificación. Tras el marcador se utiliza para recuperar los datos pendientes de la columna y los datos se colocan en el búfer de salida, el bloqueo, a continuación, se libera. Este comportamiento puede provocar el bloqueo de otros identificadores de proceso del sistema (SPID).

Solución

Si cambia la sugerencia de combinación de LOOP para HASH o MERGE, no tiene lugar el bloqueo.

Más información

Este comportamiento puede ilustrarse mediante el siguiente ejemplo:
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' 
				
el SHOWPLAN output para la consulta anterior sigue:
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)
				
el comportamiento de bloqueo fácilmente obedece iniciar otra conexión que realiza un UPDATE en las primeras filas está seleccionadas en la tabla. Observará que la UPDATE está bloqueado hasta que se procesan todas las búsquedas de marcador para la instrucción SELECT y las filas se envían al cliente. búsqueda de marcador

El operador lógico y físico de Bookmark Lookup utiliza un marcador (identificador de fila o clave de agrupación) para buscar la fila correspondiente en la tabla o índice agrupado. La columna Argument contiene la etiqueta del marcador utilizado para buscar la fila de la tabla o índice agrupado. La columna Argument también contiene el nombre de la tabla o índice agrupado en la que se busca la fila. Si la cláusula WITH PREFETCH aparece en la columna Argument, el procesador de consultas ha determinado que resulta óptimo utilizar asincrónica recopilación previa (lectura anticipada) al buscar marcadores en la tabla o índice agrupado.

Propiedades

Id. de artículo: 260652 - Última revisión: viernes, 17 de octubre de 2003 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
Palabras clave: 
kbmt kbpending kbprb KB260652 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 260652

Enviar comentarios

 

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