Está en la página 1de 22

Concurrencia de

Transacciones

Tatiana Aparicio
Concurrencia de
Transacciones
2 o más transacciones se están ejecutando al
mismo tiempo
Estado
inicial ¿Podría
ocurrir algún
problema?

Estado Estado
inicial Final
Estado
Final
Concurrencia de Transacciones
Ejercicio
1. Definir una transacción T1 para retirar 2000$ de la
cuenta nro 12 (versión explícita y simplificada)
2. Definir una transacción T2 para retirar 3000$ de la
cuenta nro 12 (versión explícita y simplificada)
3. Si se ejecutan T1 y T2 de manera aislada (una
después de la otra), ¿cuál sería el estado final de la
base de datos?
4. Si se ejecutan T1 y T2 de manera NO aislada ¿cuál
sería el estado final de la base de datos?
Ejercicio (Respuesta)
1. . - BEGIN TRANSACTION
- Select saldo into vsaldo from R(x)
cuenta where nro =12
- Si vsaldo>= 2000
- Update cuenta set W(x)
saldo=vsaldo-2000
where nro=12 COMMIT
- ELSE ROLLBACK
- COMMIT

- BEGIN TRANSACTION
2. . - Select saldo into vsaldo from R(x)
cuenta where nro =12
- Si vsaldo>= 3000
- Update cuenta set W(x)
saldo=vsaldo-3000
where nro=12 COMMIT
- ELSE ROLLBACK
- COMMIT
Ejercicio (Respuesta)
3. -. BEGIN TRANSACTION
- Select saldo into vsaldo R(x)
from cuenta
where nro =12
- Si vsaldo>= 2000
- Update cuenta W(x)
set saldo=vsaldo-2000
where nro=12
COMMIT
- ELSE ROLLBACK
- COMMIT

- BEGIN TRANSACTION
- Select saldo into vsaldo R(x)
from cuenta
where nro =12
- Si vsaldo>= 3000
- Update cuenta W(x)
set saldo=vsaldo-3000
where nro=12
COMMIT
- ELSE ROLLBACK
- COMMIT
Ejercicio (Respuesta)
4. -. BEGIN TRANSACTION
- Select saldo into vsaldo
from cuenta
where nro =12 R1(x)
- Si vsaldo>= 2000
- Update cuenta R2(x)
set saldo=vsaldo-2000
where nro=12 w1(x)
- ELSE ROLLBACK
- COMMIT

- BEGIN TRANSACTION
- Select saldo into vsaldo
from cuenta
where nro =12 W2(x)
- Si vsaldo>= 3000
- Update cuenta
set saldo=vsaldo-3000
where nro=12
- ELSE ROLLBACK
- COMMIT
Concurrencia
Cuando 2 o más transacciones tienen acceso a la
misma BD al mismo tiempo, pueden interferir
entre ellas => pueden producir resultados
incorrectos.
El procesador no puede atender a las 2 transacciones
al mismo tiempo (una operación cada vez) =>
reparte su tiempo de atención a las operaciones de
las transacciones concurrentes (obedeciendo a un
PLAN DE EJECUCIÓN).
Concurrencia
Plan de ejecución: Define el orden cronológico de la
ejecución de las operaciones R/W de las
transacciones que se ejecutan concurrentemente

Un plan de ejecución P de n transacciones es


un orden secuencial de las operaciones de las n
transacciones tal que:
∀TP, si opi <opj en T => opi < opj en P
< = ocurre antes que
opi=operacion i (R/W)
Concurrencia
Ejercicio
Sean las transacciones
T1: op11 op12 op13 op14
T2: op21 op22 op23
T3: op31 op32 op33 op34
1. Dar un ejemplo de plan de ejecución
2. Dar un ejemplo de lo que no sería plan de
ejecución
3. ¿Cuántos posibles planes de ejecución se podrían
formar con las transacciones T1,T2,T3?
Concurrencia (Ejercicio)
Sean las transacciones
T1: op11 op12 op13 op14 PE1:serial
T2: op21 op22 op23 PE2:no serial
T3: op31 op32 op33 op34
1. Dar un ejemplo de plan de ejecución
PE1: op11 op12 op13 op14 c1 op21 op22 op23 c2 op31 op32 op33
op34 c3
PE2: op11 op12 op21 op13 op22 op31 op14 op32 op33 op23 op34
c1 c2 c3
2. Dar un ejemplo de lo que no sería plan de ejecución
PE3: op12 op13 op14 op21 op11 op23 op31 op22 op32 op33
op34 c1 c2 c3
3. ¿Cuántos posibles planes de ejecución se podrían formar
con las transacciones T1,T2,T3? 6 seriales + no seriales
Concurrencia
Tipos de Planes de Ejecución
1) Seriales: No permiten operaciones
intercaladas
2) No Seriales: Permiten operaciones
intercaladas

¿Podría haber un plan serial incorrecto? NO


¿Podría haber un plan no serial incorrecto? SI
Concurrencia
Tipos de Planes de Ejecución
1) Seriales: No permiten operaciones
intercaladas
SIEMPRE CORRECTOS
2) No Seriales: Permiten operaciones
intercaladas
PUEDEN SER:
- correctos (seriables)
- incorrectos
Concurrencia
Tipos de Planes de Ejecución
Ejercicios
Sean los siguientes planes de ejecución, indicar si son
correctos o no. (justifique su respuesta)
OPi = Operación de la transacción i
1. R1(z) W1(z) R2(y) W2(x) W1(x) W2(z) commit1 commit2
2. R1(z) W1(z) R2(z) W2(u) Rollback1 W2(s) commit2
3. R1(x) W2(y) R1(y) W2(x) W1(z) commit1 commit2
4. R1(z) R2(z) W1(z) commit1 W2(z) commit2

Dar un ejemplo de plan de ejecución seriable


Problemas de Concurrencia
Planes de ejecución incorrectos

Problema de Modificación perdida


Problema de dependencia no comprometida
Problema de Análisis inconsitente
Modificación Perdida
T1: x=5 y=10 T2: x=1 y=2

X=50 X=5 X=1


Y=60 Y=10 Y=2

X=50 X=1 X=5


Y=60 Y=2 Y=10
Dos posibles resultados correctos:
T1-T2 (T2 determina el valor de x,y)
T2-T1 (T1 determina el valor de x,y)
Modificación Perdida
T1: x=5 y=10 T2: x=1 y=2

El problema de
X=50 X=5 X=1 modificación
Y=60 Y=10 Y=2
perdida ocurre
cuando
X=50 X=1 X=5
Y=60 Y=2 Y=10
T1 determina el
valor de x

X=50 X=5 T2 determina el


Y=60 y=2 valor de y
Ejemplo de Problema de Modificación perdida:
R1(z) R2(z) W1(z) W2(z) commit1 commit2

T1 R1(z) W1(z) commit1


3 z=z+10

T2 R2(z) W2(z) commit2


3 z=z+20

Tpo t1 t2 t3 t4

BD: z=3 z=13 z=23

El estado final de la base de datos no debería ser z=23, sino:


T1 y T2
T1 T2: z=33 (T2 debería trabajar con z que modificó T1) trabajan con
El valor de Z
T2 T1: z=33 (T1 debería trabajar con z que modificó T2) no modificado

También podría gustarte