Está en la página 1de 52

Administracin de Base de Datos

Procesamiento de Transacciones Ing. Ronald Prez


rrperez@unimet.edu.ve rperez@shopepk.com

Agenda
Transacciones y control de concurrencia
Propiedades Estados Programacin de transacciones

Modelo Transaccional Simple Test de Secuencialidad Protocolos de bloqueo de dos fases Protocolo basado en marcas temporales Protocolos basados en grafos Protocolos de rbol Protocolos basado en validacin Granularidad Mltiple

Transaccin Es una unidad de la ejecucin de un programa. Puede consistir en varias operaciones de acceso a la base de datos. Est delimitada por constructuras como begin-transaction y end-transaction

Transaccin

Propiedades de una transaccin


Atomicidad: es la propiedad de las transacciones que permite observarlas como operaciones atmicas: ocurren totalmente o no ocurren. Consistencia: la ejecucin aislada de la conserva la consistencia de la base de datos. transaccin

Aislamiento: para cada par de transacciones que puedan ejecutarse concurrentemente Ti y Tj, se cumple que para los efectos de Ti: Tj: ha terminado antes que comience Ti Tj ha comenzado despus que termine Ti. Las transacciones son independientes entre s.

Propiedades de una transaccin

Niveles de aislamiento Lectura no comprometida Lectura comprometida. Lectura repetible Secuenciable. Comportamiento concurrente transacciones
Lectura sucia Lectura no repetible Lectura fantasma

de

las

Propiedades ACID (lectura sucia)

Tiempo
1 2 3 4 5 6 7 8

T1

T2
Begin_transaction Read(balx) Balx=balx +100

Balx
100 100 100 200 200 100 190 190

Begin_transaction Read(balx) Balx=balx -10 Write(balx) commit

Write(balx) Rollback

Propiedades ACID (lectura no repetible)

Tiempo
1 2 3 4 5 6

T1
Begin_transaction Read(balx) Balx=balx -10 Write(balx) commit

T2
Begin_transaction Read(balx) Balx=balx +100 Write(balx) commit

Balx
100 100 100 200 90 90

Propiedades ACID (lectura fantasma)


Tiempo 1 2 3 4 5 6 7 8 Begin_transaction Read(balx) Balx=balx -10 Write(balx) Read(balz) Balz=balz+10 Write(balz) T1 T2 Begin_transaction Suma=0 Read(balx) Suma=suma+balx Read(baly) Suma=suma+baly Balx 100 100 100 100 90 90 90 90 Baly 50 50 50 50 50 50 50 50 Balz 25 25 25 25 25 25 25 35 0 0 100 100 150 150 150 Balx

9
10 11

Commit

Read(balz)
Suma=suma+balz commit

90
90 90

50
50 50

35
35 35

150
185 185

Propiedades de una transaccin

Comportamiento permitido Nivel de aislamiento Lectura sucia Lectura no repetible Si Si Lectura fantasma Si Si

Lectura no Si comprometida Lectura No comprometida

Lectura repetible
Secuenciable

No
No

No
No

Si
No

Propiedades de una transaccin


Durabilidad: El sistema gestor de bases de datos asegura que perduren los cambios realizados por una transaccin.

Estados de una transaccin


Activa: durante su ejecucin Parcialmente comprometida: despus de ejecutar su ltima instruccin. Fallida: imposible de continuar su ejecucin Abortada: transaccin retrocedida y base de datos restaurada al estado anterior a su ejecucin. Se puede reiniciar cancelar.

Modelo transaccional simple Una transaccin es una secuencia de instrucciones LOCK y UNLOCK.

LOCK asume una lectura de un elemento y UNLOCK una escritura.


La secuencialidad en este modelo simple implica secuencialidad en modelos ms complejos.

Semntica de transacciones
Es el significado de la ejecucin de la transaccin (qu hace). Para disear protocolos y planificadores es necesario relacionar la semntica (informal) de las transacciones con un test que determine si una secuencia de pasos de transacciones entrelazadas es secuenciable.

Primero: ver que la semntica es apropiada (conservadora: puede prohibir planificaciones que sean secuenciables pero no permite las que no lo sean).
Segundo: se hace corresponder la semntica con un grafo de ejecucin que permite decidir si una planificacin es secuenciable.

Control de concurrencia El proceso de gestionar una serie de operaciones simultneas en la base de datos de modo que ests no interfieran unas con otras. Sin este tipo de mecanismos, pueden producirse los problemas de la actualizacin perdida, de la dependencia no confirmada y del anlisis incoherente

Problemas de concurrencia
La ejecucin concurrente de transacciones puede dar lugar a problemas: Problema de la actualizacin perdida

Problema de leer una actualizacin temporal (lectura

sucia)
Problema del resumen incorrecto

Problema de la lectura no repetible

Problemas de concurrencia
Sol. trivial: cada transaccin se ejecuta en exclusin mutua. Cul sera la granularidad? BD? Tabla? Tupla? Atributo? La solucin trivial no es vlida: muy restrictiva Se supone que las BDs se pensaron para que varios usuarios/aplicaciones accedieran a la vez

Hay que intercalar acciones pero que el resultado sea como en exclusin mutua

Problema de actualizacin con perdida

Tiempo
1 2 3 4 5 6

T1
Begin_transaction Read(balx) Balx=balx -10 Write(balx) commit

T2
Begin_transaction Read(balx) Balx=balx +100 Write(balx) commit

Balx
100 100 100 200 90 90

Problema de la dependencia no confirmada

Tiempo
1 2 3 4 5 6

T1

T2
Begin_transaction Read(balx) Balx=balx +100

Balx
100 100 100 200 200 100 190 190

Begin_transaction Read(balx) Balx=balx -10 Write(balx) commit

Write(balx) roolback

Serializabilidad y recuperabilidad
El objetivo de un protocolo de control de concurrencia es planificar las transacciones de forma tal que se evite cualquier interferencia entre ellas, impidindose as que aparezcan los tipos de problemas descritos. Planificacin: una secuencia de las operaciones realizadas por un conjunto de transacciones concurrentes que preservan el orden de las operaciones en cada una de las transacciones individuales.

Planificaciones
Planificacin: una secuencia de las operaciones realizadas por un conjunto de transacciones concurrentes que preservan el orden de las operaciones en cada una de las transacciones individuales.
Planificacin en serie: una planificacin en la que cada una de las operaciones de cada transaccin se ejecutan consecutivamente sin que se entrelacen operaciones de otras transacciones. Planificacin no serie: una planificacin en la que las operaciones de un conjunto de transacciones concurrentes estn entrelazadas.

Condiciones de la serializacin
En lo que respecta a la serializabilidad, la ordenacin de las transacciones de lectura y escritura es importante:
Si dos transacciones nicamente leen en un determinado elemento de datos, no entran en conflicto entre s y el orden no es importante. Si hay dos transacciones que leen o escriben elementos de datos completamente independientes, no entran en conflicto entre s y el orden no es importante. Si una de las transacciones escribe un elemento de datos y otra lee o escribe el mismo elemento, el orden de ejecucin si que es importante.

Test de secuencialidad
Para determinar si un planificador es correcto, se demuestra que cada planificacin que admite es secuenciable.
Se examina la planificacin con respecto al orden en que se bloquean elementos. Este orden debe ser consistente con la planificacin secuencial equivalente. Si hay dos secuencias con rdenes diferentes de transacciones, estos dos rdenes no son consistentes con una planificacin secuencial.

Test de secuencialidad

Si hay dos secuencias con rdenes diferentes de transacciones, estos dos rdenes no son consistentes con una planificacin secuencial. El problema se reduce a la bsqueda de ciclos en un grafo dirigido

Test de secuencialidad

Algoritmo: Entrada: Una planificacin S para las transacciones T1,..,Tk. Salida: Determina si S es secuenciable y, si lo es, produce una planificacin secuencial equivalente a S.

Test de secuencialidad Algoritmo: Mtodo: Creacin de un grafo de secuencializacin G cuyos nodos son transacciones. S=a1;a2;..;an ai es Tj: LOCK Am o Tj: UNLOCK Am Dado ai= Tj: UNLOCK Am se busca Ts: LOCK Am en el orden de S tal que s<>j. Entonces, el arco <Tj,Ts> pertenece a G.

Test de secuencialidad

Entornos concurrentes

Mtodos de control de concurrencia:

Bloqueo
Basado en hora de entrada

Bloqueos Un bloqueo es una informacin del tipo de acceso que se permite a un elemento. El SGBD impone los bloqueos necesarios en cada momento. El gestor de acceso a los datos implementa las restricciones de acceso.

Control de concurrencia Bloqueo Cuando una Transaccin deba asegurarse que algn objeto sobre el que tenga inters (una tupla) no cambiar mientras lo use, adquiere un Bloqueo sobre ese objeto Dos tipos de Bloqueos: Exclusivos (de escritura) Compartidos (de lectura)

Control de concurrencia
Bloqueo Si la

Transaccin A pone un bloqueo exclusivo Lock_e(dato) sobre la tupla t -> se rechaza el pedido de cualquier otra transaccin para un bloqueo de cualquier tipo sobre t Si la Transaccin A pone un bloqueo compartido Lock_c(dato) sobre la tupla t: se rechaza el pedido de cualquier otra transaccin para un bloqueo exclusivo sobre t se acepta el pedido de cualquier otra transaccin para un bloqueo compartido sobre t

Control de concurrencia
Protocolo de Bloqueo Una Transaccin que desea recuperar una tupla t, primero debe adquirir un bloqueo compartido sobre t

Una Transaccin que desea actualizar una tupla t, primero debe adquirir un bloqueo exclusivo sobre t
Si el bloqueo pedido por una Transaccin B se rechaza porque conflicta con un bloqueo de la Transaccin A , entonces B pasa a espera hasta que se libere el bloqueo de A Las transacciones piden lo que necesitan.

Los bloqueos pueden ser compatibles simultneamente (compartidos)

existir

Control de concurrencia
Deadlock (Abrazo Mortal) Situacin en la que dos o ms transacciones se encuentran en estado simultneo de espera Si ocurre Deadlock el sistema lo debe detectar y romper La deteccin implica descubrir un ciclo en el grafo de espera (el grafo de quin est esperando a quin) La ruptura implica seleccionar una transaccin bloqueada mortalmente como vctima y deshacerla (liberando as su bloqueo)

Control de concurrencia
Deadlock lock_e(b) Read(b) b := b + 50 write(b) lock_e(a)

lock_c(a) read(a) lock_c(b)

Una de las dos debe retroceder, liberando sus datos.

Protocolo de bloqueo de 2 fases


Asegura secuencialidad Fase crecimiento: slo se obtienen bloqueos Fase decrecimiento: slo se liberan bloqueos Protocolo asegura secuencialidad en cuanto a conflictos Punto de bloqueo: punto en P donde se obtiene ltimo bloqueo Puntos de bloqueo permiten ordenar Tis secuencialmente. Protocolo no asegura ausencia de interbloqueos Puede ocurrir retroceso en cascada

Protocolo de bloqueo de 2 fases

Protocolo de bloqueo estricto de 2 fases: exige que una Ti debe poseer todos los bloqueos que tenga en X hasta que acaben las instrucciones de la Ti. Protocolo de bloqueo riguroso de 2 fases: exige que Ti posea todos los bloqueos hasta que se comprometa la Ti. Con este protocolo se pueden secuenciar las Tis en el orden en que se comprometen.

Protocolo de bloqueo de 2 fases

Protocolo de bloqueo de 2 fases


Cmo evitar el problema de la lectura no repetible
Tiempo 1 2 3 4 5 6 Begin_transaction Write_lock(balx) WAIT WAIT WAIT T1 T2 Begin_transaction Write_lock(balx) Read(balx) Balx=balx+100 Write(balx) Commit/unlock(balx) Balx 100 100 100 100 200 200

7
8 9 10

Read(balx)
Balx=balx-10 Write(balx) Commit/unlock(balx)

200
200 190 190

Protocolo de bloqueo de 2 fases

Cmo evitar el problema de la lectura sucia


Tiempo 1 2 3 4 5 6 Begin_transaction Write_lock(balx) WAIT T1 T2 Begin_transaction Write_lock(balx) Read(balx) Balx=balx+100 Write(balx) Commit/unlock(balx) Balx 100 100 100 100 200 200

7
8 9 10

Read(balx)
Balx=balx-10 Write(balx) Commit/unlock(balx)

200
190 190 190

Protocolo de bloqueo de 2 fases


Cmo evitar el problema de la lectura fantasma
Tiempo 1 2 Begin_transaction T1 T2 Begin_transaction Suma=0 Balx 100 100 Baly 50 50 Balz 25 25 0 Balx

3
4 5 6 7 8

Write_lock(balx)
Read(balx) Balx=balx-10 Write(balx) Write_lock(balz) Read(balz) read_lock(balx) WAIT WAIT WAIT WAIT

100
100 100 90 90 90

50
50 50 50 50 50

25
25 25 25 25 25

0
0 0 0 0 0

9
10 11 12 13 14 15 16 17 18 19 20

Balz=balz+10
Write(balz) Commit/unlock(balx,balz)

WAIT
WAIT WAIT Read(balx) suma=suma-balx Read_lock(baly) Read(baly) Suma=suma+baly Read_lock(balz) Read(balz) Suma=suma+balz Commit/unlock(balx,baly,balz)

90
90 90 90 90 90 90 90 90 90 90

50
50 50 50 50 50 50 50 50 50 50

25
35 35 35 35 35 35 35 35 35 35 35

0
0 0 0 90 90 90 140 140 140 175 175

Protocolo basado en grafos


Si se desea desarrollar protocolo que no sea de 2 fases, es necesario tener informacin adicional acerca de la forma en que cada Ti accede a la BD.
El modelo ms simple exige que se tenga un conocimiento acerca del orden en el cual se accede a los elementos. Dada esta informacin, se pueden construir protocolos de bloqueo que no sean de 2 fases, que adems aseguran secuencialidad.

Protocolo basado en grafos


Slo se permite instruccin bloquear-X Cada Ti puede bloquear un Q al menos una vez siguiendo las siguientes reglas: El primer bloqueo de Ti puede ser sobre cualquier Q Despus, Ti podr bloquear un Q slo si tiene bloqueado al padre de Q. Los Q bloqueados se pueden desbloquear en cualquier momento. Si Ti ha bloqueado y desbloqueado un Q en particular, no puede volver a bloquear ese Q.

Protocolo basado en grafos

Ventajas: asegura ausencia interbloqueos no necesita retrocesos desbloqueos se pueden hacer antes Desventajas: se bloquean datos a los que no se accede aumento del coste de los bloqueos tiempos de espera adicionales descenso potencial de la concurrencia

Protocolo basado en grafos

Protocolo basado en grafos

Protocolo basado en marcas temporales


Los mtodos de marca temporal para el control de concurrencia son bastante distintos de los mtodos de bloqueo. No necesita ningn tipo de bloqueo y, por tanto, no pueden aparecer interbloqueos. Los mtodos de bloqueo evitan generalmente los conflictos haciendo que las transacciones esperen. Con los mtodos de marca temporal, no existe ninguna espera.

Protocolo basado en marcas temporales


Marca temporal: un identificador unvoco creado por el SGBD y que indica el tiempo de inicio relativo de una transaccin. Control por marcas temporales: un protocolo de control de concurrencia que ordena las transacciones de tal manera que las transacciones ms antiguas, es decir, las transacciones con marcas temporales ms pequeas, tienen prioridad en caso de conflicto.

Protocolo basado en marcas temporales


2 mtodos: reloj del sistema como marca temporal contador lgico Marcas temporales de las Ti determinan el orden de secuencia. Si MT(Ti) < MT(Tj) toda planificacin que se produzca debe ser equivalente a una planificacin secuencial donde Ti aparece antes de Tj.

Protocolo basado en marcas temporales


Para implementar, a cada Q se le asocian 2 valores de marca temporal: marca_temporal-E(Q)-es la mayor marca de todas la Ti que ejecutan con xito escribir(Q). marca_temporal-L(Q)-mayor marca de todas Ti que ejecutan con xito leer(Q). Estas marcas se actualizan cada vez que se ejecuta leer(Q)/escribir(Q). Marcas temporales siempre se actualizan de forma ascendente su valor se va incrementando.

Recuperacin

Cadas del sistema durante una transaccin Errores de ejecucin: overflow, divisin por 0... Errores lgicos que violan alguna regla de integridad (definida explcitamente o no) y que dejan inconsistente la BD -> programador/ABD Problemas de concurrencia de transacciones Fallos de lectura/escritura en disco Problemas fsicos y catstrofes: fuego, robos, sabotajes,

fallos humanos,... --> medidas de seguridad informtica en la


empresa.

Recuperacin
Cadas del sistema durante una transaccin Errores de ejecucin: overflow, divisin por 0... Errores lgicos que violan alguna regla de integridad (definida explcitamente o no) y que dejan inconsistente la BD -> programador/ABD Problemas de concurrencia de transacciones

Fallos de lectura/escritura en disco


Problemas fsicos y catstrofes: fuego, robos,

sabotajes, fallos humanos,... --> medidas de seguridad informtica en la empresa.

Recuperacin
Para que el sistema se pueda recuperar ante fallos se necesita grabar cada operacin con la BD en un fichero

LOG (bitcora). Checkpoints.


Se escribe en el fichero LOG antes que en la BD El fichero LOG debe estar en memoria estable Por cada operacin se escribe un reg. en LOG <comienza-transaccin, numt> <escritura, numt, id_dato, val_viejo, val_nuevo> <lectura, numt, id_dato, valor> <termina_transaccin_con_xito, numt> <punto_comprobacin, numt, numc>