Niveles de Aislamiento
Los niveles de aislamiento definen cuánto se protege una transacción de los efectos de otras transacciones concurrentes, sacrificando algunas garantías de aislamiento a cambio de una mayor concurrencia y rendimiento.
Definition
Un nivel de aislamiento es una especificación de qué anomalías de concurrencia puede observar una transacción; los niveles más altos previenen más anomalías (hasta la serializabilidad completa) a costa de una concurrencia reducida, mientras que los niveles más bajos permiten ciertas anomalías a cambio de rendimiento.
Scope
Este tema cubre los niveles de aislamiento estándar — lectura no confirmada (read uncommitted), lectura confirmada (read committed), lectura repetible (repeatable read) y serializable (serializable) — definidos en términos de los fenómenos (lectura sucia, lectura no repetible, fantasma) que cada uno permite o previene, la crítica influyente que los replanteó en términos de anomalías permitidas, y el aislamiento de instantáneas (snapshot isolation) de importancia práctica y sus anomalías, como la asimetría de escritura (write skew). Trata la compensación entre consistencia y concurrencia. Excluye los mecanismos subyacentes de bloqueo y multiversión que implementan estos niveles.
Core questions
- ¿Qué anomalías — lectura sucia, lectura no repetible, fantasma — permite cada nivel de aislamiento?
- ¿Cómo define el estándar SQL los cuatro niveles de aislamiento?
- ¿Por qué los investigadores criticaron las definiciones basadas en anomalías como ambiguas?
- ¿Dónde encaja el aislamiento de instantáneas y qué anomalías (como la asimetría de escritura) puede permitir?
- ¿Cómo eligen las aplicaciones un nivel de aislamiento para una carga de trabajo determinada?
Key concepts
- lectura no confirmada
- lectura confirmada
- lectura repetible
- serializable
- lectura sucia
- lectura no repetible
- lectura fantasma
- aislamiento de instantáneas y asimetría de escritura
Key theories
- Niveles de aislamiento basados en anomalías
- El estándar SQL define los niveles de aislamiento por cuáles de los tres fenómenos — lecturas sucias, lecturas no repetibles y fantasmas — permiten, desde lectura no confirmada (todos permitidos) hasta serializable (ninguno permitido).
- Crítica de los niveles de aislamiento ANSI
- Berenson y sus colegas demostraron que las definiciones basadas en fenómenos del estándar son ambiguas y no caracterizan claramente los sistemas multiversión, e introdujeron el aislamiento de instantáneas como un nivel distinto y ampliamente implementado no capturado por las definiciones originales.
- Aislamiento de instantáneas y sus anomalías
- Bajo el aislamiento de instantáneas, cada transacción lee una instantánea consistente desde su inicio, lo que proporciona un comportamiento de lectura sólido sin bloqueos de lectura, pero puede permitir anomalías no serializables como la asimetría de escritura, lo que motiva el aislamiento de instantáneas serializable.
Clinical relevance
El nivel de aislamiento es una elección de configuración rutinaria pero consecuente para los desarrolladores de aplicaciones: elegir un nivel demasiado débil puede corromper los datos de forma silenciosa a través de anomalías sutiles, mientras que usar siempre el serializable puede estrangular el rendimiento, por lo que comprender los niveles es esencial para aplicaciones transaccionales correctas y de alto rendimiento.
History
El estándar ANSI/ISO SQL definió los niveles de aislamiento en términos de fenómenos permitidos. La crítica de 1995 de Berenson, Bernstein, Gray y los O'Neils expuso ambigüedades en esas definiciones y caracterizó el aislamiento de instantáneas, que adoptaron las bases de datos multiversión principales. Trabajos posteriores definieron el aislamiento de instantáneas serializable para cerrar la brecha de anomalías restante.
Debates
- Definir el aislamiento por anomalías versus por serializabilidad
- Las definiciones de la lista de anomalías del estándar son fáciles de establecer pero ambiguas y no se ajustan a los sistemas multiversión; una alternativa es definir la corrección directamente a través de la serializabilidad, lo cual es más claro pero más difícil de mapear a los niveles que los desarrolladores configuran en la práctica.
Key figures
- Jim Gray
- Philip Bernstein
- Hal Berenson
Related topics
Seminal works
- berenson1995
- gray1992
Frequently asked questions
- ¿Cuál es la diferencia entre una lectura no repetible y una lectura fantasma?
- Una lectura no repetible ocurre cuando una transacción lee la misma fila dos veces y ve valores diferentes porque otra transacción la actualizó entretanto. Una lectura fantasma ocurre cuando una transacción vuelve a ejecutar una consulta con una condición de búsqueda y ve nuevas filas que otra transacción insertó. La lectura repetible previene la primera; solo la serializable previene de forma fiable los fantasmas.
- ¿Es el aislamiento de instantáneas lo mismo que serializable?
- No. El aislamiento de instantáneas proporciona a cada transacción una instantánea consistente y previene lecturas sucias y no repetibles, pero no es completamente serializable: permite anomalías de asimetría de escritura donde dos transacciones leen datos superpuestos y realizan actualizaciones disjuntas que juntas violan una restricción. El aislamiento de instantáneas serializable lo extiende para eliminar tales anomalías.