Requisito previo: control de concurrencia en DBMS , propiedades ACID en DBMS
Como sabemos, para mantener la coherencia en una base de datos, sigue las propiedades ACID. Entre estas cuatro propiedades (Atomicidad, Consistencia, Aislamiento y Durabilidad), el aislamiento determina cómo la integridad de la transacción es visible para otros usuarios y sistemas. Significa que una transacción debe tener lugar en un sistema de tal manera que sea la única transacción que acceda a los recursos en un sistema de base de datos.
Los niveles de aislamiento definen el grado en que una transacción debe aislarse de las modificaciones de datos realizadas por cualquier otra transacción en el sistema de base de datos. Un nivel de aislamiento de transacción se define por los siguientes fenómenos:
- Lectura sucia: una lectura sucia es una situación en la que una transacción lee datos que aún no se han confirmado. Por ejemplo, digamos que la transacción 1 actualiza una fila y la deja sin confirmar, mientras tanto, la transacción 2 lee la fila actualizada. Si la transacción 1 revierte el cambio, la transacción 2 habrá leído datos que se considera que nunca existieron.
- Lectura no repetible: la lectura no repetible ocurre cuando una transacción lee la misma fila dos veces y obtiene un valor diferente cada vez. Por ejemplo, suponga que la transacción T1 lee datos. Debido a la concurrencia, otra transacción T2 actualiza los mismos datos y se compromete. Ahora, si la transacción T1 vuelve a leer los mismos datos, recuperará un valor diferente.
- Lectura fantasma: la lectura fantasma se produce cuando se ejecutan dos consultas iguales, pero las filas recuperadas por las dos son diferentes. Por ejemplo, suponga que la transacción T1 recupera un conjunto de filas que satisfacen algunos criterios de búsqueda. Ahora, la transacción T2 genera algunas filas nuevas que coinciden con los criterios de búsqueda de la transacción T1. Si la transacción T1 vuelve a ejecutar la declaración que lee las filas, esta vez obtiene un conjunto diferente de filas.
Basado en estos fenómenos, el estándar SQL define cuatro niveles de aislamiento:
- Lectura no confirmada: lectura no confirmada es el nivel de aislamiento más bajo. En este nivel, una transacción puede leer cambios aún no comprometidos realizados por otras transacciones, lo que permite lecturas sucias. En este nivel, las transacciones no están aisladas unas de otras.
- Lectura confirmada: este nivel de aislamiento garantiza que cualquier lectura de datos se confirme en el momento en que se lea. Por lo tanto, no permite la lectura sucia. La transacción mantiene un bloqueo de lectura o escritura en la fila actual y, por lo tanto, evita que otras transacciones la lean, la actualicen o la eliminen.
- Lectura repetible: este es el nivel de aislamiento más restrictivo. La transacción mantiene bloqueos de lectura en todas las filas a las que hace referencia y bloqueos de escritura en las filas a las que se hace referencia para acciones de actualización y eliminación. Dado que otras transacciones no pueden leer, actualizar o eliminar estas filas, en consecuencia, evita la lectura no repetible.
- Serializable: este es el nivel de aislamiento más alto. Se garantiza que una ejecución serializable sea serializable. La ejecución serializable se define como una ejecución de operaciones en las que las transacciones que se ejecutan simultáneamente parecen ejecutarse en serie.
La siguiente tabla muestra claramente la relación entre los niveles de aislamiento, los fenómenos de lectura y los bloqueos:
Anomalía Serializable no es lo mismo que Serializable. Es decir, es necesario, pero no suficiente, que un programa serializable esté libre de los tres tipos de fenómenos.
Referencias –
Aislamiento – Niveles de aislamiento de transacciones de Wikipedia
– docs.microsoft
Publicación traducida automáticamente
Artículo escrito por Smitha Dinesh Semwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA