Aislamiento. Niveles de Lectura Repetible y Serializable
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 operación.
Esto significa que, aunque se produzcan otros cambios en la base de datos mientras se trabaja, solo se visualizarán los datos tal como estaban 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
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, es posible 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.
La lectura fantasma, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve diferentes conjuntos 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 ejecutaran 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 instrucción 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
What is the difference between phantom read and non-repeatable read?
Can you give more examples of phantom reads?
How does the Serializable isolation level prevent phantom reads?
Awesome!
Completion rate improved to 4.55
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 operación.
Esto significa que, aunque se produzcan otros cambios en la base de datos mientras se trabaja, solo se visualizarán los datos tal como estaban 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
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, es posible 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.
La lectura fantasma, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve diferentes conjuntos 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 ejecutaran 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 instrucción para establecer este nivel de aislamiento en nuestra consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
¡Gracias por tus comentarios!