En caso de múltiples actualizaciones del mismo registro en una sola transacción, ¿cuántas versiones se almacenan?


11

Según el artículo de MSDN de Kimberly L. Tripp, " Aislamiento de transacciones basadas en el control de versiones de SQL Server 2005 de Neal Graves"

  • "... Todas las versiones anteriores de un registro en particular se encadenan en una lista vinculada; y en el caso de transacciones basadas en versiones de filas de larga duración, el enlace tendrá que atravesarse en cada acceso para llegar a la versión transaccionalmente consistente de La fila"

que se encuentra en la sección "Descripción del control de versiones de filas", común para seguir las secciones "Control de versiones de filas en lectura confirmada mediante el control de versiones de filas" y "Control de versiones de filas en el aislamiento de instantáneas".

Más adelante, el ejemplo de versiones de filas debido a modificaciones se da en el contexto de múltiples actualizaciones del mismo registro por múltiples transacciones (T1, T2, T3) en SNAPSHOT solamente.

En caso de que solo una transacción actualice un registro varias veces (mediante varias declaraciones), ¿se almacenarán (vincularán) varias tiendas de versiones o solo la que se tomó en el momento de la "imagen" SNAPSHOT tomada?

Bueno, la respuesta a esta pregunta debería responder de inmediato a mis otras preguntas relacionadas pendientes:

Respuestas:


11

En caso de múltiples actualizaciones del mismo registro en una sola transacción, ¿cuántas versiones se almacenan?

Solo uno.

La primera actualización de la fila genera una versión de fila y bloquea exclusivamente la fila. Las actualizaciones posteriores a la misma fila dentro de la misma transacción no generan nuevas versiones de fila.


Puede aparecer una lista vinculada de versiones de fila de la siguiente manera:

  • La transacción T1 en una transacción SNAPSHOT lee una fila y ve el valor 'a'.

  • La transacción T2 (bajo cualquier nivel de aislamiento) actualiza el valor de 'a' a 'b' y se compromete. Esto genera una versión de fila para el valor 'a'.

  • La transacción T3 (bajo cualquier nivel de aislamiento) actualiza el valor de 'b' a 'c' y se compromete. Esto genera una versión de fila para el valor 'b'. Esta versión de fila enlaza con la versión de fila anterior para 'a'.

  • La transacción T1 lee el valor de la fila atravesando el enlace desde el valor almacenado en la página actual ('c') hasta la versión de fila 'b', y luego de regreso a la versión de fila 'a'.

Las versiones de fila se generan por cambios de datos independientemente de si hay una transacción de lectura existente (en cualquier nivel de aislamiento). Puede que las versiones nunca sean necesarias, pero aún así se generan: se crea la misma lista vinculada de versiones incluso sin la transacción T1.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.