Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Se admiten los siguientes niveles de aislamiento para las transacciones que tienen acceso a las tablas optimizadas para memoria.
INSTANTÁNEA
LECTURA REPETIDA
Serializable
LECTURA COMPROBADA
El nivel de aislamiento de transacción se puede especificar como parte del bloque atómico de un procedimiento almacenado compilado de forma nativa. Para obtener más información, vea CREATE PROCEDURE (Transact-SQL). Al acceder a tablas optimizadas para memoria desde Transact-SQL interpretado, se puede especificar el nivel de aislamiento mediante indicaciones a nivel de tabla.
Debe especificar el nivel de aislamiento de transacción al definir un procedimiento almacenado compilado de forma nativa. Debe especificar el nivel de aislamiento en las indicaciones de tabla al acceder a tablas optimizadas para memoria desde transacciones de usuario en Transact-SQL interpretado. Para obtener más información, vea Directrices para niveles de aislamiento de transacciones con tablas de Memory-Optimized.
El nivel de aislamiento READ COMMITTED se admite para las tablas optimizadas para memoria con transacciones de confirmación automática. READ COMMITTED no es válido en las transacciones de usuario o en un bloque atómico. READ COMMITTED no se admite con transacciones de usuario explícitas o implícitas. El nivel de aislamiento READ_COMMITTED_SNAPSHOT se admite para las tablas optimizadas para memoria con transacciones de confirmación automática y solo si la consulta no tiene acceso a ninguna tabla basada en disco. Además, las transacciones que se inician mediante Transact-SQL interpretado con aislamiento SNAPSHOT no pueden acceder a tablas optimizadas para memoria. Las transacciones que usan Transact-SQL interpretados con aislamiento REPEATABLE READ o SERIALIZABLE deben tener acceso a tablas optimizadas para memoria mediante el aislamiento SNAPSHOT. Para obtener más información sobre este escenario, consulte Transacciones entre contenedores.
READ COMMITTED es el nivel de aislamiento predeterminado en SQL Server. Cuando el nivel de aislamiento de la sesión es READ COMMITED (o inferior), puede realizar una de las acciones siguientes:
Utilice explícitamente una sugerencia de nivel de aislamiento superior para acceder a la tabla optimizada para memoria (por ejemplo, WITH (SNAPSHOT)).
Especifique la
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
opción set, que establecerá el nivel de aislamiento de las tablas optimizadas para memoria en SNAPSHOT (como si incluyese sugerencias WITH(SNAPSHOT) en cada tabla optimizada para memoria). Para obtener más información sobreMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
, vea ALTER DATABASE SET Options (Transact-SQL).
Como alternativa, si el nivel de aislamiento de la sesión es READ COMMITTED, puede usar transacciones de confirmación automática.
Las transacciones SNAPSHOT iniciadas en Transact-SQL interpretado no pueden acceder a tablas optimizadas para memoria.
Los niveles de aislamiento de transacciones admitidos para las tablas optimizadas para memoria proporcionan las mismas garantías lógicas que las tablas basadas en disco. El mecanismo utilizado para proporcionar garantías de nivel de aislamiento es diferente.
En el caso de las tablas basadas en disco, la mayoría de las garantías de nivel de aislamiento se implementan mediante bloqueo, lo que evita conflictos a través del bloqueo. En el caso de las tablas optimizadas para memoria, las garantías se aplican mediante un mecanismo de detección de conflictos, lo que evita la necesidad de tomar cerrojos. La excepción es el aislamiento SNAPSHOT en tablas basadas en disco. Esto se implementa de forma similar al aislamiento SNAPSHOT en tablas optimizadas para memoria mediante un mecanismo de detección de conflictos.
INSTANTÁNEA
Este nivel de aislamiento especifica que los datos leídos por cualquier instrucción de una transacción serán la versión transaccionalmente coherente de los datos que existían al principio de la transacción. La transacción solo puede reconocer las modificaciones de datos confirmadas antes del inicio de la transacción. Las modificaciones de datos realizadas por otras transacciones después del inicio de la transacción actual no son visibles para las instrucciones que se ejecutan en la transacción actual. Las declaraciones en una transacción capturan una instantánea de los datos confirmados tal como estaban al principio de la transacción.
Las operaciones de escritura (actualizaciones, inserciones y eliminaciones) siempre están completamente aisladas de otras transacciones. Por lo tanto, las operaciones de escritura de una transacción SNAPSHOT pueden entrar en conflicto con las operaciones de escritura de otras transacciones. Cuando la transacción actual intenta actualizar o eliminar una fila que se ha actualizado o eliminado por otra transacción confirmada después de iniciar la transacción actual, la transacción finaliza con el siguiente mensaje de error.
Error 41302. La transacción actual intentó actualizar un registro en la tabla X que se ha actualizado desde que se inició esta transacción. Se anuló la transacción.
Cuando la transacción actual intenta insertar una fila con el mismo valor de clave principal que una fila insertada por otra transacción confirmada antes de la transacción actual, se producirá un error al confirmarse con el siguiente mensaje de error.
Error 41325. No se pudo confirmar la transacción actual debido a un error de validación serializable.
Si una transacción escribe en una tabla que se elimina antes de que la transacción se confirme, la transacción finaliza con el siguiente mensaje de error:
Error 41305. No se pudo confirmar la transacción actual debido a un error de validación de lectura repetible.
LECTURA REPETIBLE
Este nivel de aislamiento incluye las garantías dadas por el nivel de aislamiento SNAPSHOT. Además, REPEATABLE READ garantiza que para cualquier fila que lea la transacción, en el momento en que se confirma la transacción, la fila no haya sido cambiada por ninguna otra transacción. Cada operación de lectura de la transacción se puede repetir hasta el final de la transacción.
Si la transacción actual ha leído cualquier fila que haya sido actualizada por otra transacción que se haya confirmado antes de la transacción actual, se producirá un error en la confirmación con el siguiente mensaje de error.
Error 41305. No se pudo confirmar la transacción actual debido a un error de validación de lectura repetible.
Serializable
Este nivel de aislamiento incluye las garantías dadas por REPEATABLE READ. No han aparecido filas fantasma entre la instantánea y el final de la transacción. Las filas fantasma cumplen con la condición de filtro de una operación de selección, actualización o eliminación.
La transacción se ejecuta como si no hubiera transacciones simultáneas. Todas las acciones se producen virtualmente en un único punto de serialización (tiempo de confirmación).
Si se infringe alguna de estas garantías, la transacción no puede confirmarse con el siguiente mensaje de error:
Error 41325. No se pudo confirmar la transacción actual debido a un error de validación serializable.
Véase también
Descripción de transacciones en tablas de Memory-Optimized
Directrices para los niveles de aislamiento de transacciones con las tablas Memory-Optimized
Directrices para la lógica de reintento para transacciones en tablas de Memory-Optimized