Transactions, blocks & Deadlocks SQL Server -Part 2
Buenas acá estoy con la segunda entrega para seguir refrescando conceptos de transacciones in SQL server. Hoy vamos a hablar de:
ISOLATION LEVEL: READ UNCOMMITTED.
Podemos decir que las características de este nivel de aislamiento son las siguientes:
No realiza un shared lock por lectura lo que mejora el rendimiento pero puede afectar la integridad ya que pueden existir lecturas sucias, no repetibles y fantasmas.
Permite leer datos NO confirmados de cualquier transacción.
Entonces si existen otras transacciones modificando X registros y todavía NO realizaron el commit de esos cambios, este nivel al hacer un select devolvería esos X registros ya que NO le importa que estén confirmados.
Ahora bien, vamos a la práctica!
Let’s begin!
Primero recordemos el estado nuestra tabla:
Bien, para este Test vamos a hacer la siguiente secuencia:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
1 | BEGIN TRANSACTION T1 | |
2 | BEGIN TRANSACTION T2 | |
3 | INSERT INTO House VALUES (‘Robert’’s house’’) | |
4 | SELECT * FROM House | |
5 | COMMIT TRANSACTION T2 | |
6 | ROLLBACK TRANSACTION T1 |
Análisis paso a paso:
- Inicia transacción T1.
- Inicia T2.
- T1 Inserta un nuevo registro en House pero NO está confirmado aún.
- T2 hace un select de House y lista todos incluyendo registros NO confirmados → DIRTY READ
- Finaliza T2.
- T1. Deshace todos los cambios por lo tanto se anula el insert.
Emulemos esto en SQL:
Estado de la tabla luego de correr las transacciones:
Les dejo el código para emular este test:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED BEGIN TRANSACTION T1 INSERT INTO House VALUES (‘Robert”s House’); WAITFOR DELAY ‘000:00:10’ ROLLBACK TRANSACTION T1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED BEGIN TRANSACTION T2 SELECT * FROM House COMMIT TRANSACTION T2 |
Bien, espero que les haya gustado el articulo!
La próxima semana publicare el de Read Committed!
Saludos!
FM