Veo esperas de bloqueos compartidos ( LCK_M_S
) cuando uso RCSI. Tengo entendido que no se supone que esto suceda, ya SELECTs
que no requieren bloqueos compartidos cuando se usa RCSI.
¿Cómo puedo ver bloqueos compartidos? ¿Es por claves foráneas?
sql-server
sql-server-2008
locking
snapshot-isolation
grassbl8d
fuente
fuente
Respuestas:
Si. SQL Server vuelve a la implementación de bloqueo del nivel de aislamiento de lectura confirmada al acceder a una tabla con el fin de validar restricciones de clave externa. Esto es necesario para la corrección , y no se puede deshabilitar.
El comportamiento se aplica solo a las declaraciones de modificación de datos. Los bloqueos compartidos solo se toman cuando se verifican los datos relacionados con la clave externa. Otro acceso a datos en el mismo plan de ejecución puede continuar usando el control de versiones de fila.
Si SQL Server no hizo esto, las declaraciones de modificación de datos que se encuentran debajo
RCSI
podrían terminar violando la restricción de clave externa porque la verificación de integridad utiliza datos desactualizados (versionados).Desafortunadamente, actualmente no hay una forma compatible de ver este cambio en el comportamiento de bloqueo en un plan de ejecución. Es posible ver las sugerencias de bloqueo interno cuando la marca de seguimiento 8607 está activa.
fuente