Bloqueos compartidos tomados en Aislamiento de instantáneas confirmadas de lectura (RCSI)

9

Veo esperas de bloqueos compartidos ( LCK_M_S) cuando uso RCSI. Tengo entendido que no se supone que esto suceda, ya SELECTsque no requieren bloqueos compartidos cuando se usa RCSI.

¿Cómo puedo ver bloqueos compartidos? ¿Es por claves foráneas?

grassbl8d
fuente
¿Puedo preguntar también si el servidor SQL coloca bloqueos compartidos en los registros si no hay un índice incluso si read_committed_snapshot está activado?
grassbl8d

Respuestas:

13

¿Cómo puedo ver bloqueos compartidos? ¿Es por claves foráneas?

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 RCSIpodrí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.

Paul White 9
fuente