dba sql-server – SNAPSHOT LECTURA COMPROMETIDA vs SNAPSHOT de SQL Server

Pregunta:

Estaba investigando las diferencias entre los niveles de aislamiento READ COMMITTED SNAPSHOT y SNAPSHOT SQL Server y encontré el siguiente recurso:

Elección de niveles de aislamiento basados ​​en versiones de filas

Para la mayoría de las aplicaciones, se recomienda leer el aislamiento confirmado mediante el control de versiones de filas en lugar del aislamiento de instantáneas por las siguientes razones:

  • Consume menos espacio tempdb que el aislamiento de instantáneas.

  • El aislamiento de instantáneas es vulnerable a los 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 bajo aislamiento de instantánea lee datos que luego son modificados 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 termina y se revierte. Este no es un problema con el aislamiento confirmado de lectura mediante el control de versiones de filas.

Soy algo nuevo en estos temas, pero parece que no puedo entender las dos viñetas del enlace anterior.

  1. ¿Por qué el espacio tempdb sería diferente para estos modos? ¿Uno almacena versiones más granulares que el otro?

  2. ¿Por qué el aislamiento de instantáneas es más vulnerable a los conflictos de actualización?

Respuesta:

  1. READ COMMITTED SNAPSHOT utiliza una nueva instantánea después de cada declaración. Eso significa que se mantienen vivas menos versiones de filas. (La afirmación que citó de los documentos es un poco engañosa porque sugiere que esto siempre es cierto; solo es cierto en el caso de transacciones SNAPSHOT de larga ejecución). Las versiones de fila de instantáneas se crean en escrituras. Las lecturas no influyen en lo que se pone en tempdb. Los escritores no pueden prever qué lecturas se realizarán en el futuro. Los lectores solo influyen en lo que se puede purgar.
  2. Cuando un SNAPSHOT transacción T1 escribe en una fila que se ha modificado por otra transacción T2 en el tiempo entre T1 comenzó y T1 intentó la escritura, la instrucción falla con un error de conflicto de actualización. Este es un modelo de concurrencia optimista. Con READ COMMITTED SNAPSHOT T1 esperaría a que T2 liberara el bloqueo X en la fila y continuaría normalmente.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım