Transactions, blocks & Deadlocks SQL Server -Part 1

Buenas! Hoy voy a hablar de un poco de transacciones en SQL server debido a un problema de DEADLOCK’s que me encontré en la base de datos de un cliente recientemente. Asíque tuve que refrescar varios conceptos.

Bien, Let’s begin!

¿Qué es una transacción?
Podríamos decir que es un conjunto de operaciones que se ejecutan como una única unidad.

Estas transacciones deben cumplir con cuatro propiedades fundamentales ACID:

  1. Atomicidad: Las transacciones pueden involucrar n operaciones, entonces deben realizarse todas o ninguna.
  2. Consistencia: Asegura que una transacción NO romperá la integridad de la BD
  3. Aislamiento (Isolation): Asegura que si existen n transacciones al mismo tiempo NO se afectaran entre ellas.
  4. Durabilidad: asegura la persistencia de una transacción es decir una vez que se commiteo, los cambios formaran parte del sistema y no podrán deshacerse aunque el sistema falle.

Ahora que sabemos lo que es una transacción y lo que debe cumplir podemos centrarnos un poco en los niveles de Aislamiento o ISOLATION LEVELS.
Básicamente esto define el grado en que se aisla una transacción de las modificaciones realizadas por otra.

In SQL Server encontraremos 4 niveles de Aislamiento:

  1. Read Uncommitted
  2. Read Committed (Default SQL Server)
  3. Repeatable Read
  4. Serializable

Bien vamos a ir explotando cada uno de estos isolation levels en los próximos artículos con ejemplos de cada uno.

Generaremos una base de datos BlockTest en SQL Server con una tabla House:

CREATE TABLE [dbo].[House](
     [HouseId] [int] IDENTITY(1,1) NOT NULL,
     [Name] [varchar](100) NOT NULL,
  CONSTRAINT [PK_House] PRIMARY KEY([HouseId]))

Simplemente tendremos una tabla House con su PK y un Nombre.
Agregamos 5 registros:


Bien dejemos esto así por el momento y en el próximo articulo hablaremos sobre READ UNCOMMITTED.

Saludos!
FM