Saltar al contenido
Explorar conocimiento

concepto · intermedio · 2 min de lectura

Niveles de Aislamiento

Los niveles de aislamiento definen qué tan separadas están las transacciones concurrentes entre sí, equilibrando consistencia contra rendimiento: cuanto más aisladas, menos anomalías pero menor concurrencia.

No requiere conocimientos previos.

Alcance en breve

Cubre

  • Niveles de Aislamiento as a concept

No cubre

  • implementation details

Supone

  • The reader understands relevant fundamentals.

Resumen

El aislamiento en ACID no es binario —aislado o no—. Es un espectro definido por el estándar SQL en cuatro niveles, cada uno previniendo ciertas anomalías de concurrencia a cambio de más locks y menos rendimiento:

  1. Read Uncommitted: una transacción puede leer datos no commiteados de otra —dirty read—. Máximo rendimiento, mínima consistencia.
  2. Read Committed: solo lee datos commiteados. Previene dirty reads pero permite non-repeatable reads —la misma query dentro de una transacción puede devolver resultados distintos—.
  3. Repeatable Read: la misma query devuelve los mismos resultados. Previene dirty reads y non-repeatable reads, pero permite phantom reads —aparecen filas nuevas que cumplen la condición—.
  4. Serializable: las transacciones se ejecutan como si fueran secuenciales. Sin anomalías, pero con el menor rendimiento y mayor riesgo de deadlocks.

Alcance y supuestos

Cubre los cuatro niveles de aislamiento del estándar SQL y las anomalías que cada uno previene. Asume familiaridad con transacciones.

Modelo mental

Cuatro niveles de privacidad en una oficina. Read Uncommitted: todos ven lo que escribís en tiempo real. Read Committed: solo ven lo que ya guardaste. Repeatable Read: una vez que abrís un documento, nadie puede modificar lo que estás leyendo. Serializable: solo una persona puede usar la oficina por vez.

Uso práctico

  • ✅ Read Committed es el default en PostgreSQL y SQL Server —buen balance—.
  • ✅ Serializable para transferencias bancarias.
  • ❌ Read Uncommitted casi nunca es aceptable en producción.

Ejemplo trabajado: phantom read

Una transacción cuenta usuarios activos —50—. Otra transacción inserta un usuario nuevo y commitea. La primera transacción vuelve a contar y encuentra 51 usuarios —phantom read—. Con Serializable, la segunda transacción espera a que la primera termine.

Evidencia

  • El estándar SQL define los cuatro niveles. PostgreSQL implementa Serializable con Serializable Snapshot Isolation (SSI).

Fuentes citadas