25
Unidad IV NIVELES DE AISLAMIENTO

Unidad iv expo sbdts

Embed Size (px)

Citation preview

Page 1: Unidad iv expo sbdts

Unidad IV

NIVELES DE AISLAMIENTO

Page 2: Unidad iv expo sbdts

NIVELES DE AISLAMIENTO

El nivel de aislamiento de una transacción (transaction isolation level) define el grado en que se aísla una transacción de las modificaciones de recursos o datos realizadas por otras transacciones

Page 3: Unidad iv expo sbdts

El nivel de aislamiento de una transacción es una característica de vital importancia en el desarrollo de aplicaciones de base de datos, ya que afecta a los tipos y duración de bloqueos que se producen en una infraestructura de base de datos, lo cual, tiene efectos directos en el rendimiento y tiempo de respuesta de nuestras consultas y transacciones

Page 4: Unidad iv expo sbdts

Lectura sucia:

Las sentencias select son ejecutadas si realizar bloques, pero podría usarse una versión anterior de un registro.

las lecturas no son consistentes al usar este nivel de aislamiento.

Page 5: Unidad iv expo sbdts

Lectura no repetible:

una transacción vuelve a leer datos que previamente había leído y encuentra que han sido modificados o eliminados por una transacción.

Page 6: Unidad iv expo sbdts

Lectura fantasma:

Una transacción vuelve a ejecutar una consulta, devolviendo un conjunto de registros que satisfacen una condición de búsqueda y encuentra que otros registro que satisfacen la condición han sido insertadas por otra transacción cursada.

Page 7: Unidad iv expo sbdts

Niveles de aislamiento:Comportamiento permitido

Nivel de aislamiento

Lectura

Sucia No repetible Fantasma

Lectura no comprometida Sí Sí Sí

Lectura comprometida No Sí Sí

Lectura repetible No No Sí

Secuenciable No No No

Page 8: Unidad iv expo sbdts

SQL  permite todos estos niveles, Oracle sólo permite la lectura comprometida y secuenciable.

Los niveles se pueden establecer en ambos para cada transacción.

Page 9: Unidad iv expo sbdts

4 niveles de aislamiento basados en bloqueos.

• READ UNCOMMITTED puede recuperar datos modificados pero no confirmados por otras transacciones (lecturas sucias - dirty reads).

• En este nivel se pueden producir todos los efectos secundarios de simultaneidad (lecturas sucias, lecturas no repetibles y lecturas fantasma

• - EJEMPLO: entre dos lecturas de un mismo registro en una transacción A, otra transacción B puede modificar dicho registro, pero no hay bloqueos ni versiones de lectura, por lo que se minimiza la sobrecarga.

Page 10: Unidad iv expo sbdts

Una operación de lectura (SELECT) no establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, por lo que no será bloqueada por otra transacción que tenga establecido un bloqueo exclusivo por motivo de una operación de escritura.

Este nivel de aislamiento ofrece grandes beneficios de rendimiento, pero sólo se utiliza en casos en que la ocurrencia de lecturas sucias (dirty reads) no sea un problema.

Page 11: Unidad iv expo sbdts

READ COMMITTED

permite que entre dos lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, obteniendo diferentes resultados de la misma lectura.

Evita las lecturas sucias (dirty reads), pero por el contrario, permite lecturas no repetibles

Page 12: Unidad iv expo sbdts

Con ese nivel de aislamiento, una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo. Sin embargo, dichos bloqueos compartidos finalizarán junto con la propia operación de lectura, de tal modo que entre dos lecturas cabe la posibilidad de que otra transacción realice una operación de escritura.

EJEMPLO: ( UPDATE) en este caso, la segunda lectura obtendrá datos distintos a la primera lectura (lecturas no repetibles).

Page 13: Unidad iv expo sbdts

REPEATABLE READ Evita que entre dos lecturas de un mismo

registro en una transacción A, otra transacción B pueda modificar dicho registro, con el efecto de que en la segunda lectura de la transacción A se obtuviera un dato diferente. De este modo, ambas lecturas serían iguales (lecturas repetidas).

Una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, y los mantendrá hasta el final de la transacción, garantizando así que no se produce lecturas no repetibles (non repeatable reads).

Page 14: Unidad iv expo sbdts

la Mayor consistencia en la transacción, mediante mayores recursos y bloqueos evitan los problemas de las lecturas sucias y de las lecturas no repetibles.Este modo de aislamiento no evita las lecturas fantasma, es decir, una transacción podría ejecutar una consulta sobre un rango de filas EJEMPLO: ( 100 filas) y de forma simultánea otra transacción podría realizar un inserción de una o varias filas sobre el mismo rango.

Page 15: Unidad iv expo sbdts

SERIALIZABLE Garantiza que una transacción recuperará

exactamente los mismos datos cada vez que repita una operación de lectura, es decir, la misma sentencia SELECT con la misma cláusula WHERE devolverá el mismo número de filas, luego no se podrán insertar filas nuevas en el rango cubierto por la WHERE, etc.

Page 16: Unidad iv expo sbdts

Se evitarán las lecturas fantasma) aunque para ello aplicará un nivel de bloqueo que puede afectar a los demás usuarios en los sistemas multiusuario (realizará un bloqueo de un rango de índice conforme a la cláusula WHERE y si no es posible bloqueará toda la tabla).

Evita los problemas de las lecturas sucias (dirty reads), de las lecturas no repetibles (non repeatable reads), y de las lecturas fantasma (phantom reads).

Page 17: Unidad iv expo sbdts

es muy importante recordar que el tiempo de espera por un bloqueo por defecto en SQL es infinito. Es decir, si tenemos una transacción que está manteniendo un bloqueo sobre un recurso.

Para ello, es posible utilizar la sentencia SET LOCK_TIMEOUT para especificar el tiempo máximo de espera por bloqueo (en milisegundos).

En caso de que una transacción alcance el tiempo máximo de espera por bloqueo, se producirá un mensaje de error.

1222 (Msg 1222, Level 16, State 51, Line 1. Lock request time out period exceeded.). También es posible conocer el actual tiempo de espera por bloqueo, consultando el valor de la función del sistema @@LOCK_TIMEOUT.

Page 18: Unidad iv expo sbdts

niveles de aislamiento basados en

filas

Page 19: Unidad iv expo sbdts

SNAPSHOT en vez de realizar un uso intensivo de

bloqueos, su funcionamiento se basa en el almacenamiento de versiones de filas en TEMPDB.

Si una transacción empieza en un momento del tiempo determinado, sólo será capaz de acceder a la información de la base de datos que era real en aquel momento del tiempo.

 conflictos de actualización lo cual implicaría  que la transacción se deshace (Rollback). 

Page 20: Unidad iv expo sbdts

READ COMMITTED SNAPSHOT.

Tiene la ventaja de utilizar el versionado de filas de tal modo, que las lecturas no son bloqueadas por las escrituras y viceversa.

Pueden producirse lecturas no repetibles y lecturas fantasmas.

Page 21: Unidad iv expo sbdts

En PostgreSQL el bloqueo puede ser Compartido (Share) o Exclusivo (Exclusive), son administrados por un “Lock Manager.

si un bloqueo toma mucho tiempo en ejecutarse se produce un Deadlock, el sistema lo muestra como un Timeout.

Un bloqueo puede darse a una tupla, una página o una tabla completa. 

En PostgreSQL existe una tabla de locks, y esta es consultada antes de ejecutar una transacción nueva.

Page 22: Unidad iv expo sbdts

Bloqueos y TablasPostgres ofrece varios modos de bloqueo para controlar el acceso

concurrente a los datos en tablas.

Todos los modos de bloqueo (excepto para AccessShareLock) adquiridos en un transacción se mantienen hasta la duración de la transacción.

Existen dos tipos de bloqueos:• Bloqueos a nivel de tabla

• Bloqueos a nivel de registro

Page 23: Unidad iv expo sbdts

Bloqueos a Nivel de tablaAccessShareLock Un modo de bloqueo adquirido automáticamente sobre

tablas que están siendo consultadas. Postgres libera estos bloqueos después de que se haya ejecutado una declaración.

RowShareLock Adquirido por SELECT FOR UPDATE y LOCK TABLE para declaraciones IN ROW SHARE MODE.

RowExclusiveLock Lo adquieren UPDATE, DELETE, INSERT y LOCK TABLE para declaraciones IN ROW EXCLUSIVE MODE.

ShareLock Lo adquieren CREATE INDEX y LOCK TABLE para declaraciones IN SHARE MODE.

ShareRowExclusiveLock Lo toma LOCK TABLE para declaraciones IN SHARE ROW EXCLUSIVE MODE.

ExclusiveLock Lo toma LOCK TABLE para declaraciones IN EXCLUSIVE MODE.

AccessExclusiveLock Lo toman ALTER TABLE, DROP TABLE, VACUUM FULL, por defecto en un LOCK TABLE

Page 24: Unidad iv expo sbdts

Bloqueos a Nivel de Fila• Este tipo de bloqueos se producen cuando campos internos de

una fila son actualizados (o borrados o marcados para ser actualizados). Postgres no retiene en memoria ninguna información sobre filas modificadas y de este modo no tiene límites para el número de filas bloqueadas sin incremento de bloqueo.

• Sin embargo, SELECT FOR UPDATE modificará las filas seleccionadas marcándolas, de tal modo que se escribirán en el disco.

• Los bloqueos a nivel de fila no afecta a los datos consultados. Estos son usados para bloquear escrituras a la misma fila

únicamente.

Page 25: Unidad iv expo sbdts

BEGIN WORK;consulta1;consulta2;...COMMIT WORK; == END WORK;ROLLBACK WORK; == ABORT WORK

Sintaxis