Estaba investigando las diferencias entre los niveles de aislamiento READ COMMITTED SNAPSHOT
y SQL Server SNAPSHOT
y encontré el siguiente recurso:
Elección de niveles de aislamiento basados en versiones de fila
Para la mayoría de las aplicaciones, se recomienda el aislamiento comprometido de lectura mediante el control de versiones de filas sobre el aislamiento de instantáneas por los siguientes motivos:
Consume menos espacio tempdb que el aislamiento de instantáneas.
El aislamiento de instantáneas es vulnerable a conflictos de actualización que no son aplicables al aislamiento confirmado de lectura mediante el control de versiones de filas. Cuando una transacción que se ejecuta con aislamiento de instantánea lee datos que luego se modifican por otra transacción, una actualización de la transacción de instantánea a los mismos datos provoca un conflicto de actualización y la transacción finaliza y retrocede. Esto no es un problema con el aislamiento confirmado de lectura usando el control de versiones de fila.
Soy algo nuevo en estos temas, pero parece que no puedo entender los dos puntos del enlace de arriba.
¿Por qué el espacio tempdb sería diferente para estos modos? ¿Uno almacena versiones más granulares que el otro?
¿Por qué el aislamiento de instantáneas es más vulnerable a los conflictos de actualización?
fuente
Una diferencia más entre la instantánea y la instantánea confirmada de lectura es la siguiente.
En la primera sesión
SET TRAN ISOLATION LEVEL INSTANTÁNEA COMIENCE TRAN SELECT * DESDE TB1 ..... .....
En la segunda sesión
Actualizar TB1 SET NAME = NAME + 'test' Donde id = 1
En la primera sesión
SELECCIONAR * DESDE TB1: ESTO VOLVERÁ el nombre del valor para ID = 1, no nombre + 'prueba' COMPROMISO
En la instantánea de lectura confirmada, la primera selección en la sesión 1 devolverá el nombre para id = 1, y la segunda selección devolverá el nombre + 'prueba'.
Por lo tanto, en el aislamiento de instantáneas, SQL SERVER realiza una instantánea al comienzo de la transacción y lee de esa instantánea durante toda la transacción.
En la instantánea confirmada de lectura, la instantánea se toma para cada instrucción SELECT durante la transacción.
fuente