Microsoft SQL Server
Niveles de aislamiento y bloqueo.
Buscar..
Observaciones
Encontré este enlace, es útil como referencia: "Niveles de aislamiento"
Ejemplos de ajuste del nivel de aislamiento.
Ejemplo de configuración del nivel de aislamiento:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
READ UNCOMMITTED
: significa que una consulta en la transacción actual no puede acceder a los datos modificados de otra transacción que aún no se ha confirmado, ¡sin lecturas sucias! PERO, las lecturas no repetibles y las lecturas fantasma son posibles, porque los datos todavía pueden ser modificados por otras transacciones.REPEATABLE READ
: significa que una consulta en la transacción actual no puede acceder a los datos modificados de otra transacción que aún no se ha confirmado, ¡sin lecturas sucias! Ninguna otra transacción puede modificar los datos que lee la transacción actual hasta que se complete, lo que elimina las lecturas NO REPETIBLES. PERO, si otra transacción inserta NEW ROWS y la consulta se ejecuta más de una vez, las filas fantasmas pueden aparecer comenzando la segunda lectura (si coincide con la declaración where de la consulta).SNAPSHOT
: solo puede devolver datos que existen al principio de la consulta. Asegura la consistencia de los datos. Previene lecturas sucias, lecturas no repetibles y lecturas fantasma. Para usar eso, se requiere configuración de DB:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-
READ COMMITTED
: aislamiento predeterminado del servidor SQL. Previene la lectura de los datos que son modificados por otra transacción hasta que se confirme. Utiliza el bloqueo compartido y el control de versiones de filas en las tablas, lo que evita las lecturas sucias. Depende de la configuración de la base de datos READ_COMMITTED_SNAPSHOT, si está habilitada, se utiliza el control de versiones de fila. para habilitar - usa esto:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
-
SERIALIZABLE
: utiliza bloqueos físicos que se adquieren y mantienen hasta el final de la transacción, lo que evita lecturas sucias, lecturas fantasma, lecturas no repetibles. PERO, tiene un impacto en el rendimiento de la Base de Datos, porque las transacciones concurrentes se serializan y se ejecutan una por una.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;