Aislamiento. Niveles de Lectura Repetible y Serializable
Desliza para mostrar el menú
Lectura Repetible
El nivel de aislamiento Lectura Repetible en bases de datos garantiza que, al iniciar una transacción, se visualiza una instantánea de la base de datos que permanece igual durante toda la tarea.
Esto significa que, incluso si se producen otros cambios en la base de datos mientras se trabaja, solo se verá la información tal como estaba al comenzar.
Las transacciones bajo el aislamiento de Lectura Repetible mantienen bloqueos de lectura en todas las filas que consultan y bloqueos de escritura en las filas que insertan, actualizan o eliminan. Esto previene actualizaciones perdidas, lecturas sucias y lecturas no repetibles.
Sin embargo, existe un problema que aún puede ocurrir con este tipo de aislamiento: la lectura fantasma.
Lectura fantasma
Las lecturas fantasma ocurren cuando una transacción vuelve a ejecutar una consulta y encuentra conjuntos de filas diferentes que cumplen la condición de filtro original de la consulta.
Por ejemplo, supongamos que una transacción consulta todas las órdenes con un monto total superior a $1000. Si otra transacción inserta una nueva orden con un monto total que cumple esta condición entre la primera y la segunda ejecución de la consulta, la primera transacción observará esta fila adicional en la segunda ejecución, lo que resulta en una lectura fantasma.
La lectura fantasma puede ocurrir cuando una transacción está leyendo datos y otra transacción agrega nuevos registros a la base de datos. Como resultado, se pueden obtener conjuntos de resultados diferentes en dos lecturas consecutivas.
Lectura no repetible vs lectura fantasma
La lectura no repetible ocurre cuando la misma consulta ejecutada por el Usuario A devuelve valores diferentes para la misma fila entre lecturas consecutivas, normalmente debido a modificaciones realizadas por el Usuario B.
Por otro lado, la lectura fantasma sucede cuando la misma consulta ejecutada por el Usuario A devuelve conjuntos diferentes de filas entre lecturas consecutivas, aunque las filas individuales no hayan sido actualizadas.
Podemos especificar este nivel de aislamiento en nuestra consulta SQL utilizando el siguiente comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
El nivel de aislamiento Serializable es el nivel más alto de aislamiento en bases de datos, garantizando la forma más estricta de control de concurrencia.
En este nivel, las transacciones se ejecutan como si fueran procesadas de manera serial, una tras otra, aunque en realidad puedan ejecutarse concurrentemente. Esto asegura que el resultado de las transacciones sea el mismo que si se hubieran ejecutado en algún orden serial, manteniendo la consistencia y evitando todas las anomalías de concurrencia conocidas.
Nota
El uso de este tipo de aislamiento puede llevar a una disminución del rendimiento debido al aumento de bloqueos.
Podemos utilizar la siguiente sentencia para establecer este nivel de aislamiento en nuestra consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla