Pixelaula.
Transacciones y concurrencia · Lección 4 de 5

¿Cuánto ver de los demás?

Aislar por completo cada transacción es seguro pero lento. Los niveles de aislamiento deciden cuánta interferencia se tolera. Al terminar sabrás elegir el nivel adecuado.

⏱ 20–30 min▶ Video de 85 s🧪 Laboratorio con 4 misiones
00 · En 85 segundos

Primero, la idea completa

Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.

    01 · El criterio

    ¿Cuándo es correcta una ejecución intercalada?

    Damos por hecho que cada transacción, ejecutada sola, es correcta: transforma un estado correcto de la base de datos en otro estado correcto. Entonces también es correcto ejecutarlas una tras otra, en cualquier orden.

    De ahí sale el criterio aceptado: una ejecución intercalada es correcta cuando produce el mismo resultado que alguna ejecución en serie de esas mismas transacciones. A esa propiedad se le llama seriabilidad.

    Fíjate en el “alguna”: no importa si el resultado equivale a T1 y luego T2, o a T2 y luego T1. Cualquiera de las dos es válida.

    Escena 1

    x empieza en 100. T1 hace x = x + 10; T2 hace x = x × 2. Cada una lee x y luego escribe. Elige un orden de los cuatro pasos: ¿es seriable?

    02 · La idea

    Un control de volumen para la interferencia

    Garantizar la seriabilidad siempre tiene un costo: más bloqueos y más esperas. Por eso los sistemas permiten elegir un nivel de aislamiento: el grado de interferencia que una transacción está dispuesta a tolerar de las demás.

    Mientras más alto el nivel, menos interferencia y menos concurrencia. Mientras más bajo, más interferencia y más concurrencia. Pocas aplicaciones usan siempre el máximo.

    03 · Las anomalías

    Tres cosas que pueden salir raras

    • Lectura sucia: lees un cambio que otra transacción aún no confirma. Es la dependencia no confirmada.
    • Lectura no repetible: lees la misma fila dos veces dentro de tu transacción y obtienes valores distintos, porque otra la cambió y confirmó en medio.
    • Fantasma: repites una consulta sobre un conjunto de filas, por ejemplo un COUNT(*), y aparecen filas nuevas que otra transacción insertó.
    Escena 2

    Elige un nivel y mira qué anomalías permite y cuánto deja trabajar en paralelo.

    04 · Cómo se logra

    Los cuatro niveles del estándar SQL

    • READ UNCOMMITTED: lee sin pedir bloqueos y ve incluso lo no confirmado.
    • READ COMMITTED: solo ve lo confirmado, pero cada lectura ve el valor del momento. Es el nivel por defecto en muchos sistemas.
    • REPEATABLE READ: lo que lees queda bloqueado hasta tu COMMIT, así que nadie lo cambia mientras tanto. Pero las filas nuevas sí pueden aparecer.
    • SERIALIZABLE: además protege el conjunto completo que consultaste. Una inserción que afectaría tu consulta debe esperar.

    Se elige con SET TRANSACTION ISOLATION LEVEL … antes de empezar la transacción. Las escrituras siempre se bloquean entre sí en todos los niveles: lo que cambia es cuánto se protegen las lecturas.

    Ampliación
    Los textos clásicos hablan de al menos cinco niveles, y cada sistema los implementa a su manera. Muchos agregan uno de instantánea (snapshot): cada transacción lee una foto fija de la base de datos tomada al empezar.
    05 · Predice

    Antes de leer la respuesta

    Truco para tu laboratorio
    El nivel lo fija la sesión que lee, porque las anomalías son de lectura. Cambia el selector de T1 antes de su BEGIN y usa T2 para molestarla.
    Laboratorio

    Tu turno: cuatro niveles, tres anomalías

    Dos sesiones sobre las mismas tres cuentas. T1 será tu transacción “de reporte” y T2, la que la molesta. Cambia el nivel de T1 en su selector y provoca, una por una, las tres anomalías. Al final, comprueba que SERIALIZABLE no deja pasar ninguna.

    Repaso

    Comprueba lo que entendiste

    Cada respuesta incorrecta explica por qué parece correcta y en qué falla.