Está en la página 1de 2

Niveles de aislamiento en Base de Datos

El aislamiento es una parte importante de la propiedad ACID que garantiza que las
transacciones sean fiables. Esto permite que las transacciones que se ejecutan
simultneamente no interfieran con otras, garantizando la integridad de los
datos, al no existir aislamiento en una transaccin podra modificar los datos que
otra transaccin est leyendo, por lo que se crea una inconsistencia cuando se
crean datos.
Ahora que entendemos que es el aislamiento en trminos generales, vamos a
conocer cules son los niveles de aislamiento, estos determinan como las
transacciones se comportan con otras transacciones, es como ser ms o menos
restrictivo. Escoger cual es el mejor nivel depende de las necesidades de la
aplicacin, primero debe entender cules son los beneficios y consecuencias de
cada una de ellas.
READ UNCOMMITTED: Leen valores modificados por otras transacciones
no persistidos (commitados).
READ COMMITTED: No dejan leer valores modificados por otras
transacciones no persistidos (commitados). READ COMMITTED al releer
datos que se han comitado por otra transaccin durante la ejecucin de la
propia; obtiene valores diferentes.
READ_COMMITTED_SNAPSHOT: Evita el problema del READ
COMMITED. Crea un estado en la base de datos; de esta manera la
transaccin lee los datos referidos a ese estado. No impide que otras
transacciones modifiquen los datos ledos por la nuestra.
REPEATABLE READ: Evita el problema del READ COMMITED.
REPEATABLE READ evita que otra transaccin modifique los datos
modificados por nuestra transaccin. Dado que los datos ledos; pueden
depender de lo realizado en la otra transaccin.
SERIALIZABLE: REPEATABLE READ que adems se extiende para
inserciones.

Cada uno de estos niveles de aislamiento tienen sus beneficios y consecuencias,


vamos a explicar cada situacin:
Se puede evitar el nivel de aislamiento SERIALIZABLE
Si, Como vemos es el ms restrictivo sacrificando consistencia por rendimiento, un
nivel de aislamiento parecido es REPEATABLE-READ, tiene una forma de bloqueo
especial que ayuda a evitar los fenmenos fantasmas, podemos asegurarnos de
hacer un buen bloqueo sin fenmenos fantasmas usando la estructura SELECT
con FOR UPDATE o LOCK IN SHARE MODE. El bloqueo compartido permite a
otras transacciones leer los registros examinados, pero no actualizar o borrar
mientras que otra transaccin est interviniendo.
Realicacin y Niveles de aislamiento
El tipo de replicacin predeterminada en MySQL es la replicacin basada en
declaraciones [Statement Based Replication (SBR)], mantiene los cambios de los
datos por la re-ejecucin de las sentencias SQL ejecutadas en el maestro a los
esclavos. Esto requiere que el nivel de aislamiento sea ms estricto, de modo que
los cambios de datos deben ser consistentes, de tal manera que el mismo SQL
debe garantizar los mismos cambios en el esclavo. Cuando usamos este tipo de
replicacin puedes configurar el nivel de aislamiento en SERIALIZABLE o
REPEATABLE-READ. Si usas la versin 5.1 o superior de MySQL debes usar el
nivel de aislamiento READ-COMMITTED para garantizar la consistencia de datos.
Los niveles de rendimiento y aislamiento
Como hemos podido ver, mientras ms bloqueos menos rendimiento y mayor
consistencia, la intencin es buscar un equilibrio segn nuestras necesidades, ya
que los extremos son perjudiciales. Usar el nivel de aislamiento SERIALIZABLE no
es para nada favorable a nivel de rendimiento, pero usar READ-UNCOMMITTED
mejora mucho el rendimiento pero no garantiza la integridad de los datos, por lo
que nos quedan las dos opciones del medio.

También podría gustarte