Академический Документы
Профессиональный Документы
Культура Документы
Los sistemas de procesamiento de transacciones permiten normalmente la ejecucin de varias transacciones concurrentemente. Permitir varias transacciones que actualizan concurrentemente los datos provoca complicaciones en la consistencia de los mismos.
La propiedad de aislamiento en entornos monousuarios se obtiene automticamente, y no permite que ms de una transaccin est activa en cada momento.
Asegurar la consistencia a pesar de la ejecucin concurrente de las transacciones requiere un trabajo extra. Sin embargo, existen dos buenas razones para permitir la concurrencia:
1.
Productividad y utilizacin de recursos mejoradas. Una transaccin implica operaciones de E/S y operaciones de CPU. Mientras una transaccin ejecuta una lectura/escritura, otra puede ejecutarse en la CPU. Esto incrementa el nmero de transacciones que se pueden ejecutar en un tiempo dado (productividad).
Anlogamente, la utilizacin del procesador y del disco aumenta tambin; el procesador y el disco estn menos tiempo desocupados o sin hacer ningn trabajo til
2.
Tiempo de espera reducido. Debe haber una mezcla de transacciones cortas y largas. Si las transacciones se ejecutan secuencialmente, la transaccin corta debe esperar a que la transaccin larga anterior se complete, lo cual puede llevar a un retardo impredecible en la ejecucin de la transaccin.
Ejecucin concurrente
5
Problemas de la concurrencia
6
Problemas de la concurrencia
7
Problemas de la concurrencia
8
Problemas de la concurrencia
9
Problemas de la concurrencia
10
T2 Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + descuento Escribir (cuentaB)
Supongamos que la ejecucin de T1 y T2 se realiza en un entorno libre de fallos; por lo tanto, cada transaccin comienza, se ejecuta y termina logrando atomicidad. Para cuentaA= 4000 y cuentaB = 1000,
Cules sern sus valores si ejecutamos T1 y luego T2? Cules sern sus valores si ejecutamos T2 y luego T1?
En un entorno concurrente, es necesario establecer un criterio de ejecucin para no afectar la integridad de la Base de Datos.
En general, un entorno concurrente con N transacciones en ejecucin puede generar N! planificaciones en serie diferentes. Ejemplo.
T1 Leer (cuentaA) cuentaA = cuentaA 1000 Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + 1000 Escribir (cuentaB)
T2 Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + descuento Escribir (cuentaB)
Planificacin 1:
T1
Leer (cuentaA) cuentaA = cuentaA 1000 Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + 1000 Escribir (cuentaB) Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + descuento Escribir (cuentaB)
T2
Planificacin 2:
T1 T2
Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + descuento Escribir (cuentaB) Leer (cuentaA) cuentaA = cuentaA 1000 Escribir (cuentaA) Leer (cuentaB) cuentaB = cuentaB + 1000 Escribir (cuentaB)
Hasta el momento, una planificacin tiene las siguientes caractersticas: Involucra todas las instrucciones de las transacciones. Conservan el orden de ejecucin de estas transacciones. Esto significa que cada transaccin debe ser analizada como un todo, cuando una transaccin comienza, hasta que no finalice, ninguna otra puede iniciar. Esto garantiza la secuencialidad en la ejecucin y, por ende, la propiedad de aislamiento.
Nuevamente el problema se presenta porque con esta solucin se demora mucho. Las planificaciones para un entorno concurrente no deben ser necesariamente en serie. Cuando la ejecucin de una transaccin no afecta el desempeo de otra transaccin, ambas pueden ejecutarse concurrentemente sin afectar la propiedad de aislamiento. Ejemplo.
Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA)
T2
Leer (cuentaA) descuento = cuentaA * 0,2 cuentaA = cuentaA descuento Escribir (cuentaA) Leer (cuentaB)
An bajo condiciones libres de fallo, la ejecucin concurrente de T1 y T2 puede dejar la Base de Datos en un estado de inconsistencia.
Si se deja el control de la ejecucin concurrente completamente al sistema operativo son posibles muchas planificaciones, incluyendo las que dejan a la BD en un estado inconsistente. Es tarea del componente de control de concurrencia del sistema de BD asegurar que cualquier planificacin que se ejecute lleva a la BD a un estado consistente.
Transacciones serializables
22
Por lo tanto, no todas las planificaciones concurrentes son vlidas. Una planificacin concurrente, para que sea vlida, debe equivaler a una planificacin serie. Si se puede demostrar que la ejecucin concurrente tiene el mismo resultado que un planificacin serie, entonces la planificacin concurrente es vlida. Slo las instrucciones READ y WRITE deben considerarse para realizar cualquier tipo de anlisis.
Transacciones serializables
23
Si las instrucciones operan sobre datos diferentes, no generan conflicto. Supongamos I1 e I2 instrucciones de T1 y T2 respectivamente que operan sobre el dato D.
Si I1=READ(D) e I2=READ(D), no hay conflicto. Si I1=READ(D) e I2=WRITE(D), hay conflicto. Si I1=WRITE(D) e I2=READ(D), hay conflicto. Si I1=WRITE(D) e I2=WRITE(D), hay conflicto.
En conclusin, dos instrucciones son conflictivas si operan sobre el mismo dato, y al menos una de ellas es una operacin de escritura.
Transacciones serializables
24
Dos planificaciones, P y P, se denominan equivalentes en cuanto a conflictos, cuando P se logra a partir del intercambio de instrucciones no conflictivas de P.
Una planificacin P es serializable en cuanto a conflictos si es equivalente en cuanto a conflictos a una planificacin en serie.
Transacciones serializables
25
Ejercicio 1: Dada la siguiente planificacin, presentar dos planificaciones equivalentes en cuanto a conflictos.
T1
Leer (cuentaA) Escribir (cuentaA) Leer (cuentaA) Escribir (cuentaA) Leer (cuentaB) Escribir (cuentaB) Leer (cuentaB) Escribir (cuentaB)
T2
Transacciones serializables
26
Ejercicio 2: A partir de las siguientes transacciones, con el requisito de consistencia X=0 o Y=0 y siendo los valores iniciales X=Y=0:
a)
b)
Armar las posibles planificaciones en serie. Armar una ejecucin concurrente que produzca una planificacin no serializable.
T2: leer (Y) leer(X) if Y=0 then X:=X+1 escribir(X)
Transacciones serializables
27
Veamos un mtodo simple y eficiente para determinar si una planificacin P es serializable en cuanto a conflictos.
Se construye un grafo dirigido, llamado grafo de precedencia para P. Este grafo consiste en un par G = (V, A) siendo V un conjunto de vrtices y A un conjunto de aristas.
El conjunto de vrtices consiste de todas las transacciones de P.
Transacciones serializables
28
El conjunto de aristas consiste en todos los arcos Ti Tj para los cuales se dan una de las tres condiciones siguientes:
Ti
ejecuta un write(q) antes que Tj un read(q) Ti ejecuta un write(q) antes que Tj un write(q) Ti ejecuta un read(q) antes que Tj un write(q)
Si el grafo de precedencia de P tiene un ciclo, entonces la planificacin P no es serializable en cuanto a conflictos. Si el grafo no contiene ciclos, entonces la planificacin P es serializable en cuanto a conflictos.
Transacciones serializables
29
T1
T2
T1
T2
CICLO