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 realicen 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: el fantasma de lectura.
Fantasma de lectura
El fantasma de lectura 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 fantasma de lectura
La lectura no repetible ocurre cuando la misma consulta ejecutada por el Usuario A devuelve valores diferentes para la misma fila entre lecturas consecutivas, generalmente debido a modificaciones realizadas por el Usuario B.
El fantasma de lectura, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve conjuntos de filas diferentes 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 forma 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 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
Awesome!
Completion rate improved to 4.35
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 realicen 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: el fantasma de lectura.
Fantasma de lectura
El fantasma de lectura 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 fantasma de lectura
La lectura no repetible ocurre cuando la misma consulta ejecutada por el Usuario A devuelve valores diferentes para la misma fila entre lecturas consecutivas, generalmente debido a modificaciones realizadas por el Usuario B.
El fantasma de lectura, en cambio, sucede cuando la misma consulta ejecutada por el Usuario A devuelve conjuntos de filas diferentes 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 forma 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 sentencia para establecer este nivel de aislamiento en nuestra consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
¡Gracias por tus comentarios!