Está en la página 1de 56

7.

Control de la concurrencia
Objetivos
Conocer la problemtica asociada a la concurrencia
de transacciones en los sistemas de bases de datos
Entender el significado de la serializabilidad y su
aplicacin al control de la concurrencia
Comprender algunas tcnicas para el control de la
concurrencia empleadas por los sistemas gestores
de bases de datos

Tema 7. Control de la concurrencia

7. Control de la concurrencia
Contenidos
1.
2.
3.
4.

Introduccin y problemas de la concurrencia


Serializabilidad
Tcnicas de control de la concurrencia
Granularidad de datos

Tema 7. Control de la concurrencia

7. Control de la concurrencia
Bibliografa
[CB 2005] Connolly, T.; Begg C.: Sistemas de bases de
datos. 4 Edicin. Pearson Educacin. Addison Wesley.
(Cap. 20)
[EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de
Sistemas de Bases de Datos. 3 Edicin. AddisonWesley. (Cap. 19 y 20)
[EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de
datos. Conceptos fundamentales. 2 Edicin.
Addison-Wesley Iberoamericana. (Cap. 17 y 18)

Tema 7. Control de la concurrencia

7.1 Introduccin
Los sistemas de bases de datos, segn el nmero de
usuarios que pueden utilizarlos de forma
concurrente, se clasifican en sistemas monousuario
y multiusuario
Varios usuarios pueden usar un mismo equipo a la
vez gracias a la multiprogramacin: el computador
puede procesar al mismo tiempo varias
transacciones
Si el equipo tiene varias CPU, es posible el procesamiento
simultneo (paralelo) de transacciones
Si slo hay una CPU, el SO de multiprogramacin reparte
el tiempo de CPU entre las transacciones:
ejecucin concurrente intercalada
modelo
que supondremos
4
Tema 7. Control de
la concurrencia

7.1 Introduccin
Varias transacciones introducidas por usuarios,
que se ejecutan de manera concurrente, pueden
leer/modificar los mismos elementos almacenados
en la base de datos
Razones para permitir la concurrencia:
Aumentar la productividad: nmero de transacciones
ejecutadas por minuto.
Aumentar la utilizacin de la CPU (menos tiempo ociosa) y
Control del disco.
Reducir el tiempo medio de respuesta de transacciones (las
pequeas no esperan a las grandes).

Tema 7. Control de la concurrencia

7.1 y problemas de la concurrencia


Por qu es necesario el control de la
concurrencia?
... porque pueden surgir problemas si las
transacciones concurrentes se ejecutan de
manera no controlada
Ejemplo sencillo:
sistema de bases de datos que permite hacer y anular reservas de plazas
en vuelos de diferentes compaas areas.
Se almacena un registro por cada vuelo, que incluye,
entre otras cosas, el nmero de asientos reservados en el
vuelo
Sean dos transacciones T1 y T2 concurrentes:
T1 transfiere N reservas realizadas en un vuelo X a otro
vuelo Y
T2 reserva M plazas en el vuelo X
Tema 7. Control de la concurrencia

7.1 y problemas de la concurrencia


Problemas potenciales provocados por la
concurrencia
Transaccin T1

Transaccin T2

leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);

leer_elemento(X);
X:= X+M;
escribir_elemento(X);

Aunque las transacciones pueden ser perfectamente


correctas en s mismas, la ejecucin concurrente de
T1 y T2 puede producir un resultado incorrecto,
debido a la intercalacin de sus operaciones,
poniendo en cuestin la integridad y la coherencia
de la base de datos
Tema 7. Control de la concurrencia

7.1 y problemas de la concurrencia


Problemas potenciales provocados por la concurrencia
La actualizacin perdida
T1 y T2 que acceden a los mismos datos, tienen sus
operaciones intercaladas de modo que hacen incorrecto
el valor de algn dato
T1

T2

leer_elemento(X);
X:= X-N;
leer_elemento(X);
X:= X+M;
escribir_elemento(X
);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y
);
Tema 7. Control de la concurrencia

escribir_elemento(X
);
El elemento X tiene un valor
incorrecto porque su
actualizacin por T1 se
perdi (se sobreescribi)
8

7.1 y problemas de la concurrencia


Problemas potenciales provocados por la concurrencia
La actualizacin temporal (o lectura sucia)
T1 actualiza un elemento X de la BD y luego falla, pero antes
de que se restaure el valor original de X, T2 tiene acceso al
valor temporal de X
T1

leer_elemento(X);
X:= X-N;
escribir_elemento(X
);

T2

leer_elemento(X);
X:= X+M;
escribir_elemento(X
);

leer_elemento(Y); T1 falla y debe devolver a X su

antiguo valor; pero mientras, T2


ha ledo el valor temporal
incorrecto de X (dato sucio)
Tema 7. Control de la concurrencia

7.1 y problemas de la concurrencia


Problemas potenciales provocados por la concurrencia
El resumen incorrecto
Otra transaccin T3 calcula una funcin agregada de
resumen sobre varios registros (suma las plazas reservadas para todos
los vuelos), mientras otras transacciones, como T1, actualizan
dichos registros: puede que T3 considere unos registros
antes
de ser actualizados y otros
despus
T1
T3

leer_elemento(X);
X:= X-N;
escribir_elemento(X
);

suma:=0;
leer_elemento(A)
;
suma:=
suma+A;

leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y
Tema 7. Control );
de la concurrencia

leer_elemento(X)
;
suma:=
suma+X;
leer_elemento(Y)
;
suma:= suma+Y;

T3 lee X despus de
restar N, pero lee Y
antes de sumar N, as
que el resultado es un
resumen incorrecto
(discrepancia de N)

10

7.1 y problemas de la concurrencia


Problemas potenciales provocados por la concurrencia
La lectura no repetible
T4 lee un elemento X dos veces y otra transaccin, como T1,
modifica dicho X entre las dos lecturas: T4 recibe diferentes
valores para el mismo elemento
T1

T4

leer_elemento(X);
X:= X-N;
escribir_elemento(X
);
leer_elemento(Y);

Y:=Y+N;
escribir_elemento(Y
Tema 7. Control de la concurrencia
);

leer_elemento(X
);

T4 lee X antes de
restar N

leer_elemento(X
);

T4 lee X despus
de restar N

11

7.2 Serializabilidad
Motivacin
Objetivo de un protocolo de control de concurrencia:
Planificar las transacciones de forma que no ocurran
interferencias entre ellas, y as evitar la aparicin de
los problemas mencionados

Solucin obvia: no permitir intercalacin de


operaciones de varias transacciones
T1
T2
leer_elemento(X);
X:= X-N;
escribir_elemento(X
);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y leer_elemento(X);
);
X:= X+M;
escribir_elemento(X)
;
Planificacin A
Tema 7. Control de la concurrencia

T1

leer_elemento(X);
X:= X-N;
escribir_elemento(X
);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y
Planificacin
B
);

T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X)
;

12

7.2 Serializabilidad
Motivacin
Pero el objetivo de un SGBD multiusuario tambin es
maximizar el grado de concurrencia del sistema
Si se permite la intercalacin de operaciones,
existen muchos rdenes posibles de ejecucin de las
T1
T2
T1 transacciones
T2
leer_elemento(X);
X:= X-N;

leer_elemento(X);
X:= X+M;

escribir_elemento(X
);
leer_elemento(Y);
escribir_elemento(X)
;
Y:=Y+N;
escribir_elemento(Y
Planificacin
C: actualizacin perdida!
);

leer_elemento(X);
X:= X-N;
escribir_elemento(X
);
leer_elemento(X);
X:= X+M;
escribir_elemento(X)
;
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y
Planificacin
D: correcta!
);

Existe algn modo de identificar las ejecuciones que est garantizado que
protegen la consistencia de la base de datos?

Teora de la Serializabilidad
Tema 7. Control de la concurrencia

13

7.2 Serializabilidad
Planificacin de transacciones
Cada transaccin comprende una secuencia de
operaciones que incluyen acciones de lectura y
escritura en la BD, que finaliza con una confirmacin
(commit) o anulacin (rollback)
Una planificacin P de n transacciones
concurrentes T1, T2 ... Tn es una secuencia de las
operaciones realizadas por dichas transacciones,
sujeta a la restriccin de que
para cada transaccin Ti que participa en P,
sus operaciones aparecen en P
en el mismo orden en el que ocurren en Ti
Tema 7. Control de la concurrencia

14

7.2 Serializabilidad
Planificacin de transacciones
Para el control de la concurrencia (y recuperacin de
fallos) interesa prestar mayor atencin a estas
abreviatur
operaciones: operacin
a

leer_elemento

escribir_elemento

commit

rollback

Ejemplos de planificaciones de transacciones


El subndice de cada operacin indica la transaccin que la
realiza

PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;


PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ;
PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ;
P : l (X) ; e (X) ; l (X) ; e (X) ; c ; l (Y) ; e (Y) ; c ;

Tema 7. Control de la concurrencia

15

7.2 Serializabilidad
Planificacin serie
Una planificacin serie P es aquella en la que las
operaciones de cada transaccin se ejecutan
consecutivamente sin que se intercalen
operaciones de otras transacciones
PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;
PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ;
Toda planificacin serie es correcta BD
consistente
Pero no se garantiza que los resultados de todas las
ejecuciones en serie de las mismas transacciones
sean idnticos
Ejemplo: clculo del inters de una cuenta bancaria antes o despus de realizar
un ingreso considerable

en general, son inaceptables en la prctica

Tema 7. Control de la concurrencia

16

7.2 Serializabilidad
Planificacin no serie
Una planificacin no serie P es aquella en la que
las operaciones de un conjunto de
transacciones concurrentes se ejecutan
intercaladas
KO

PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ;


PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
Hemos de determinar qu planificaciones no
serie permiten llevar la BD a un estado al que
pueda llegarse mediante una ejecucin en
Este es el objetivo de la
serie
Serializabilidad

Tema 7. Control de la concurrencia

17

7.2 Serializabilidad
Planificacin serializable
Una planificacin P (no serie) es serializable si es
equivalente a alguna planificacin serie de las
mismas n transacciones
Una planificacin que no es equivalente a ninguna
ejecucin en serie, es una planificacin no serializable

Toda planificacin serializable es correcta


Produce los mismos resultados que alguna ejecucin en
serie

Dos maneras de definir la equivalencia entre


planificaciones:
Equivalencia por conflictos
Equivalencia de vistas
Tema 7. Control de la concurrencia

18

7.2 Serializabilidad
Equivalencia por conflictos
Si dos transacciones nicamente leen un
determinado elemento de datos, no entran en
conflicto entre s y el orden de las operaciones no es
importante
Si hay dos transacciones que leen o escriben
elementos de datos independientes, no entran en
conflicto entre s y el orden de las operaciones no es
importante
Si una de las transacciones escribe un elemento de
datos y la otra lee o escribe el mismo elemento,
entran en conflicto y el orden de las operaciones
s es importante
Tema 7. Control de la concurrencia

19

7.2 Serializabilidad
Equivalencia por conflictos
En una planificacin, 2 operaciones estn en
conflicto si
pertenecen a diferentes transacciones,
tienen acceso al mismo elemento X,
y al menos una de ellas es escribir_elemento(X)
Operaciones en conflicto en las planificaciones PC y PD:

PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1;


PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
Dos planes son equivalentes por conflictos si el
orden de cualesquiera dos operaciones en
20
Tema 7.
Control de la concurrencia
conflicto
es el mismo en ambos planes

7.2 Serializabilidad
Planificacin serializable por conflictos
Una planificacin P es serializable por conflictos
si equivale por conflictos a alguna planificacin
serie S
Podremos intercambiar cada dos operaciones de P
consecutivas de transacciones distintas y sin conflicto, hasta
obtener la planificacin serie equivalente
PD : l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
PD1: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; c2 ; e1(Y) ; c1 ;
PD2: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c2 ; c1 ;
PD3: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c1 ; c2 ;
PD4: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; e1(Y) ; c1 ; c2 ;
PD5: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; e2(X) ; c1 ; c2 ;
PD6: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; c1 ; e2(X) ; c2 ;
PD7: l1(X) ; e1(X) ; l1(Y) ; l2(X) ; e1(Y) ; c1 ; e2(X) ; c2 ;
P : l (X) ; e (X) ; l (Y) ; e1(Y) ; l2(X) ; c1 ; e2(X) ; c2 ;

Tema 7. Control D8
de la
1 concurrencia
1
1

Es una planificacin serie!


PD es serializable
21

7.2 Serializabilidad
Deteccin de la serializabilidad por conflictos
Construccin del grafo de precedencia (o de
serializacin)
Es un grafo dirigido G = ( N, A )
N es un conjunto de nodos y A es un conjunto de aristas
Ti
dirigidas
Algoritmo:
Crear un nodo por cada transaccin Ti en P
Crear una arista Tj Tk si Tk lee el valor de un elemento
despus de que Tj lo haya escrito
Crear una arista Tj Tk si Tk escribe el valor de un
elemento despus de que Tj lo haya ledo

Tj de unTk
Crear una arista Tj Tk si Tk escribe el valor
elemento despus de que Tj lo haya escrito
Tema 7. Control de la concurrencia

22

7.2 Serializabilidad
Deteccin de la serializabilidad por conflictos (y 2)
Una arista Tj Tk indica que Tj debe aparecer antes
que Tk en una planificacin serie equivalente a P,
pues dos operaciones en conflicto aparecen en dicho
orden en P
Si el grafo contiene un ciclo, P no es serializable
por conflictos
Un ciclo es una secuencia de aristas C=((Tj Tk), (Tk Tp),... (Ti
Tj))

Si no hay ciclos en el grafo, P es serializable


Es posible obtener una planificacin serie S
Ta1 P, mediante
T2
T1una ordenacin
T2
T1
T2
T1equivalente
T2
topolgica
de los
PA
PB nodos
PD
Tema 7. Control de la concurrencia

PC

23

7.2 Serializabilidad
Ejemplo de planificacin no serializable
Transaccin T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);

Transaccin T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);

Transaccin T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);
Y

T1

leer_elemento(X);
escribir_elemento(X
);

T2
T3
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y)
;
leer_elemento(Y);
leer_elemento(Z);

leer_elemento(X);

leer_elemento(Y);
escribir_elemento(Y
); 7. Control de la concurrencia
escribir_elemento(X)
Tema

escribir_elemento(Y
);
escribir_elemento(Z
);
Planificacin E

T1

T2
Y,Z

T3
Hay dos ciclos:
T1T2T1 y
T1T2T3T1
24

7.2 Serializabilidad
Ejemplo de planificacin serializable
Transaccin T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);

T1

Transaccin T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);

T2

leer_elemento(X);
escribir_elemento(X
);
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y leer_elemento(Y);
);
escribir_elemento(Y)
;
leer_elemento(X);
escribir_elemento(X)
Tema 7. Control de la concurrencia

Transaccin T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);

T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y
);
escribir_elemento(Z
);

Planificacin F

T1

X,Y

T2
Y,Z

T3
La planificacin
serie
equivalente es
T3 T1 T2
25

7.2 Serializabilidad
Aplicaciones de la serializabilidad
Planificador de
Tareas del SO

Planificacin P
(ordenamiento de
las operaciones)

Carga del sistema


Momento de
introduccin de las
transacciones
Prioridades de los
procesos
...

Es el SO el que distribuye los recursos


para los procesos, y determina la
intercalacin de las operaciones de las
transacciones concurrentes
(ejecutadas como procesos del SO)

Parece, pues, que habra


que comprobar si P es
serializable una vez
ejecutadas las
transacciones incluidas en
Ejecucin
P... de
Transacciones

P serializable?
SI
OK

reintentar

NO

Cancelar el
efecto de P

enfoque muy
poco prctico!!

Es necesario encontrar tcnicas que garanticen la


serializabilidad, sin tener que verificar a posteriori

Tema 7. Control de la concurrencia

26

7.3 Tcnicas de control de concurrencia


Mtodos basados en la teora de la
serializabilidad, que definen un conjunto de reglas
(o protocolo) tal que...
si todas las transacciones las cumplen, o
el subsistema de control de concurrencia del
SGBD las impone (automticamente)
... se asegura la serializabilidad de toda
planificacin de transacciones
Clasificacin

Mtodos de bloqueo
Mtodos de marca de tiempo
Tcnicas de multiversin
Mtodos optimistas

Tema 7. Control de la concurrencia

27

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo
Uso de bloqueos para controlar el acceso
concurrente a los elementos de datos almacenados
en la base de datos
Reglas bsicas del bloqueo:
Bloqueo compartido: si una transaccin tiene un bloqueo
compartido sobre un elemento de datos, puede leer el
elemento, pero no actualizarlo (escribir)
Varias transacciones pueden mantener a la vez bloqueos
compartidos sobre el mismo elemento
Bloqueo exclusivo: si una transaccin tiene un bloqueo
exclusivo sobre un elemento de datos, puede leer y
actualizar (escribir) el elemento
Un bloqueo exclusivo proporciona acceso exclusivo al
elemento
Tema 7. Control de la concurrencia

28

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo
Reglas de uso de los bloqueos
1. T debe emitir bloquear_lectura(X) o bloquear_escritura(X) antes
de ejecutar una operacin leer_elemento(X)
2. T debe emitir bloquear_escritura(X) antes de realizar una
operacin escribir_elemento(X) en T
3. T debe emitir desbloquear(X) una vez completadas todas
las operaciones leer_elemento(X) y escribir_elemento(X)
4. Si T ya posee un bloqueo, compartido o exclusivo,
sobre X
no emitir bloquear_lectura(X) ni bloquear_escritura(X)
*esta regla puede permitir excepciones: mejora y reduccin de bloqueos*

5. T no emitir desbloquear(X) salvo si posee un bloqueo,


compartido o exclusivo, sobre X
Tema 7. Control de la concurrencia

29

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo
Cuando una transaccin T solicita un bloqueo
Si el elemento no ha sido ya bloqueado por otra
transaccin, se le concede el bloqueo
Si el elemento s est bloqueado, el SGBD determina si la
solicitud es compatible con el bloqueo existente:
Si se pide un bloqueo compartido sobre un elemento
que ya tiene un bloqueo compartido, el bloqueo ser
concedido a T
En otro caso, T debe esperar hasta que se libere el
bloqueo existente

Una transaccin que obtiene un bloqueo lo mantiene


hasta que lo libera explcitamente o termina
(commit o rollback)
Slo cuando se libera un bloqueo exclusivo los efectos de la
escritura sern visibles para las dems transacciones
30
Tema 7. Control de la concurrencia

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo
Algunos sistemas permiten la mejora (o promocin)
y la reduccin (o degradacin) de bloqueos
Aumenta el nivel de concurrencia del sistema

Si T emiti bloquear_lectura(X), ms tarde puede


mejorarlo a bloqueo exclusivo emitiendo
bloquear_escritura(X)
Si T es la nica que tiene un bloqueo compartido sobre X, se
le concede la solicitud
En otro caso, T debe esperar

Si T emiti bloquear_escritura(X), ms tarde puede


reducirlo a un bloqueo compartido emitiendo
bloquear_lectura(X)
As permite que otras transacciones lean X
Tema 7. Control de la concurrencia

31

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo
El uso de bloqueos para la programacin de
transacciones no garantiza la serializabilidad de
las planificaciones
Transaccin T4
Transaccin T5
bloquear_lectura(Y); bloquear_lectura(X);
leer_elemento(Y);
leer_elemento(X);
desbloquear(Y);
desbloquear(X);
bloquear_escritura(X) bloquear_escritura(Y)
;
; leer_elemento(Y);
leer_elemento(X);
Y:=X+Y;
X:=X+Y;
escribir_elemento(Y);
escribir_elemento(X); desbloquear(Y);
desbloquear(X);

Valores iniciales: X=20, Y=30


Resultados de las planificaciones
serie:
T4T5: X=50, Y=80
T5T4: X=70, Y=50
Resultado de la planificacin
G:
X=50,
(No serializable!)
Tema 7. Control
de Y=50
la concurrencia

T4
T5
bloquear_lectura(Y);
leer_elemento(Y);
desbloquear(Y);
bloquear_lectura(X);
leer_elemento(X);
desbloquear(X);
bloquear_escritura(Y
); leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y)
;
bloquear_escritura(X)
desbloquear(Y);
;
leer_elemento(X);
X:=X+Y;
Planificacin G
escribir_elemento(X);
desbloquear(X);
32

7.3 Tcnicas de control de concurrencia


Mtodos de bloqueo: Bloqueo en dos fases
Es necesario seguir un protocolo adicional que
indique dnde colocar las operaciones de
bloqueo y desbloqueo dentro de las transacciones
El ms conocido es el Bloqueo en Dos Fases (B2F)
Una transaccin T sigue el protocolo de bloqueo en
dos fases si todas las operaciones de bloqueo
preceden a la primera operacin de
desbloqueo
De este modo, podemos ver T dividida en dos fases:
Fase de expansin (o crecimiento)
T puede adquirir bloqueos
T no puede liberar ningn bloqueo

Fase de contraccin
T puede liberar bloqueos existentes
T no puede adquirir ningn bloqueo
Tema 7. Control de la concurrencia

33

7.3 Tcnicas de control de concurrencia


Bloqueo en dos fases
Si el sistema permite mejorar y reducir bloqueos
La mejora slo puede tener lugar en la fase de expansin
La reduccin slo puede realizarse en la fase de
contraccin
En el cdigo de T, un bloquear_lectura(X) puede aparecer en la
fase de contraccin de T slo si reduce un bloqueo exclusivo a
uno compartido
Transaccin T4
Transaccin T5
bloquear_lectura(Y);
leer_elemento(Y);
bloquear_escritura(X);
desbloquear(Y);
leer_elemento(X);
X:=X+Y;
escribir_elemento(X);
desbloquear(X);

Tema 7. Control de la concurrencia

bloquear_lectura(X);
leer_elemento(X);
bloquear_escritura(Y);
desbloquear(X);
leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y);
desbloquear(Y);

34

7.3 Tcnicas de control de concurrencia


Bloqueo en dos fases
Si toda transaccin de una planificacin sigue el
protocolo de bloqueo en dos fases, entonces la
planificacin es serializable
Ventaja
Ya no es necesario comprobar la serializabilidad de las
planificaciones

Inconvenientes
El B2F puede limitar el grado de concurrencia en un plan
Emplear bloqueos puede provocar problemas de ...
Interbloqueo (bloqueo mortal o abrazo mortal)
Bloqueo indefinido (o espera indefinida)

Tema 7. Control de la concurrencia

35

7.3 Tcnicas de control de concurrencia


Bloqueo en dos fases conservador o esttico
T debe bloquear todos los elementos a los que
tendr acceso (lectura o escritura) antes de comenzar
a ejecutarse
Si no es posible bloquear algn elemento, T no
bloquear ninguno y esperar para reintentarlo ms
tarde
Bloqueo
en dos
estricto
Protocolo
librefases
de interbloqueo

noutilizado
libera ningn
el Tms
(con COMMIT o ROLLBACK)

bloqueo exclusivo hasta terminar

Ninguna transaccin lee o escribe un elemento


modificado por T, salvo si T se ha
completadoplanificacin estricta
Puede sufrir interbloqueo (salvo si se combina con B2F

conservador)
Bloqueo
en dos fases riguroso
T no
libera
bloqueo compartido ni exclusivo hasta
ms
restrictivo
queningn
el B2F estricto
terminar (con COMMIT o ROLLBACK) planificacin estricta
Tema 7. Control de la concurrencia

36

7.3 Tcnicas de control de concurrencia


El problema del interbloqueo
Situacin en la que cada una de dos (o ms)
transacciones est esperando a que se libere
un bloqueo establecido por la otra transaccin
T6
bloquear_escritura(X)
;
leer_elemento(X);
X:=X-10;
escribir_elemento(X);
bloquear_escritura(Y)
;
[ en espera ]

T7
bloquear_escritura(Y)
;
leer_elemento(Y);
Y:=Y+100;
escribir_elemento(Y);
bloquear_escritura(Y)
;

El SGBD ha de reconocer un
[ en
espera ]
interbloqueo
y romperlo:
Abortar una o ms transacciones
Se deshacen sus escrituras y se liberan sus bloqueos
As, el resto de transacciones podr continuar su
ejecucin

Reiniciar automticamente las transacciones

Tema 7. Control de la concurrencia

37

7.3 Tcnicas de control de concurrencia


El problema del interbloqueo
Hay 3 tcnicas generales para gestionar los
interbloqueos
Temporizaciones de bloqueos
Prevencin de interbloqueos
Deteccin de interbloqueos
Conviene detectar interbloqueos cuando se sabe que
hay poca interferencia entre transacciones, es
decir si...
Las transacciones son cortas y bloquean pocos
elementos, o
La carga de transacciones es pequea

En otro caso, conviene usar temporizaciones o


tcnicas de prevencin
Es ms difcil prevenir que utilizar temporizaciones o
38
Tema 7. Control de la concurrencia
que detectarlos y romperlos, por lo que en la

7.3 Tcnicas de control de concurrencia


Temporizaciones de bloqueos
Una transaccin que solicita un bloqueo slo
esperar durante un perodo de tiempo
predefinido por el sistema
Si no se concede el bloqueo durante ese tiempo,
se producir un fin de temporizacin: el SGBD
asumir que la transaccin est interbloqueada
(aunque puede que no), la abortar y la reiniciar
automticamente
Es una solucin muy sencilla y prctica
Pero puede hacer que sean abortadas y reiniciadas
transacciones que en realidad no estn en un
interbloqueo
Tema 7. Control de la concurrencia

39

7.3 Tcnicas de control de concurrencia


Prevencin de interbloqueos
Ordenar las transacciones usando marcas
temporales de transaccin MT(T):
Identificador nico para T
Las MT se ordenan segn se inician las transacciones
La T ms antigua tiene la MT(T) menor

Sea Tj que intenta bloquear el elemento de datos X ,


pero X ya est bloqueado por Tk con un candado en conflicto
Algoritmo Esperar - Morir

si MT(Tj) < MT(Tk) entonces Tj puede esperar


si no, se aborta Tj (Tj muere) y
se reinicia despus con la misma marca de tiempo

Una Tj ms antigua espera a que termine otra Tk ms reciente


Una Tj ms reciente que solicita un elemento bloqueado por una Tk
ms antigua, es abortada (muere) y reiniciada

Tema 7. Control de la concurrencia

40

7.3 Tcnicas de control de concurrencia


Prevencin de interbloqueos
Algoritmo Herir - Esperar

si MT(Tj) < MT(Tk) entonces se aborta Tk (Tj hiere a Tk) y


se reinicia despus con la misma MT
si no, Tj puede esperar

Una Tj ms reciente espera a que termine una Tk ms antigua


Una Tj ms antigua que solicita un elemento bloqueado por una Tk
ms reciente, hace que la ms reciente sea abortada (es herida) y
reiniciada

Inconvenientes
Ambos algoritmos hacen que sean abortadas y reiniciadas
transacciones que podran provocar un bloqueo mortal,
aunque tal cosa nunca ocurriera!
En el algoritmo Esperar-Morir, una Tj podra abortar y
reiniciarse varias veces seguidas si Tk ms antigua sigue
bloqueando el X que Tj solicita
Tema 7. Control de la concurrencia

41

7.3 Tcnicas de control de concurrencia


Deteccin de interbloqueos
Verificacin peridica del estado del sistema
est en un bloqueo mortal?
Creacin de un grafo de espera que muestra las
dependencias entre transacciones
Crear un nodo por cada transaccin en ejecucin,
etiquetado con el identificador de la transaccin, T
Tj
Tk
Si Tj espera para bloquear el elemento X, ya bloqueado por
Tk, crear una arista dirigida desde Tj a TXk
Tj
Tk
Cuando Tk libera el candado sobre X, borrar la arista
correspondiente

Si existe un ciclo en el grafo de espera, entonces se


ha detectado un interbloqueo entre las
transacciones
Tema 7. Control de la concurrencia

42

7.3 Tcnicas de control de concurrencia


Deteccin de interbloqueos
Pero... cundo hay que verificar el estado del
sistema (ejecutar el algoritmo que genera el grafo de
espera)?
A intervalos uniformes de tiempo, o
A intervalos de tiempo desiguales :
Iniciar algoritmo de deteccin con un tamao de
intervalo inicial
Cada vez que no se detecta interbloqueo, incrementar el
intervalo
Por ejemplo, al doble del anterior

Cada vez que se detecta interbloqueo, reducir el


intervalo
Por ejemplo a la mitad

Existirn lmites superior e inferior del tamao del


intervalo
Tema 7. Control de
la concurrencia

43

7.3 Tcnicas de control de concurrencia


Deteccin de interbloqueos
Si el sistema est en un estado de interbloqueo, el
SGBD necesita abortar algunas transacciones...
Cules? Seleccin de vctimas
Es mejor abortar transacciones que lleven poco tiempo en
ejecucin
Es mejor abortar una transaccin que haya hecho pocos
cambios en la base de datos
Es mejor abortar una transaccin que todava debe hacer
muchos cambios en la base de datos
Puede que el SGBD no conozca esta informacin

Se trata de abortar las transacciones que supongan


el mnimo coste
Es necesario evitar la inanicin
Tema 7. Control de la concurrencia

44

7.3 Tcnicas de control de concurrencia


Deteccin de interbloqueos: el problema de la
inanicin
Una transaccin sufre inanicin cuando es
seleccionada para ser abortada (vctima)
sucesivamente: nunca termina su ejecucin
Es similar al bloqueo indefinido

La solucin es asignar prioridades ms altas a las


transacciones abortadas varias veces, para no ser
siempre las vctimas

Tema 7. Control de la concurrencia

45

7.3 Tcnicas de control de concurrencia


El problema del bloqueo indefinido
El protocolo de control de concurrencia nunca
selecciona a una transaccin que est
esperando para establecer un bloqueo, mientras
otras transacciones continan ejecutndose con
normalidad
Ocurre si el esquema de espera da ms prioridad a unas
transacciones que a otras esquema de espera injusto

Dos algoritmos de prevencin de bloqueo indefinido


Consiguen un esquema de espera justo

El primero que llega, es el primero en ser


atendido
Las transacciones puede bloquear el elemento X en el
orden en que solicitaron su bloqueo

Aumento de prioridad en la espera


Cuanto ms espera T, mayor es su prioridad
de
Cuando
T tiene la prioridad ms alta de todas, obtiene el46
Tema 7. Control
la concurrencia

7.4 Granularidad de datos


Elementos de bases de datos y granularidad
Toda tcnica de control de concurrencia supone que
la base de datos est constituida por un conjunto de
elementos de datos con nombre
Normalmente, un elemento de datos ser uno de
estos:

un valor de campo de un registro de la BD


un registro de la BD
una pgina (uno o varios bloques de disco)
un fichero
la BD completa

Granularidad = tamao del elemento de


informacin
Granularidad fina elementos de tamao pequeo
Granularidad gruesa elementos grandes
Tema 7. Control de la concurrencia

47

7.4 Granularidad de datos


Eleccin del tamao adecuado del elemento de
datos
En el contexto de los mtodos de bloqueo, el
tamao del elemento de datos afecta al grado
de concurrencia:
tamao(elemento) Grado de concurrencia

Y tambin...
nmero de elementos en la BD
carga de trabajo para la gestin de bloqueos, y
espacio ocupado por la informacin de bloqueo

Pero... Cul es el tamao adecuado para los


elementos?
Pues depende de la naturaleza de las transacciones:
Si una T representativa accede a pocos registros
elegir granularidad de registro
Si T accede a muchos registros de un mismo fichero
elegir granularidad de pgina o de fichero
Tema 7. Control de la concurrencia

48

Aclaracin ...
NIVEL DE ABSTRACCIN
LGICO O CONCEPTUAL:
Definicin del nivel de
aislamiento de cada
transaccin (por parte del
usuario o, por omisin, el
propio SGBD)
Control explcito de
bloqueos (operacin LOCK)
por parte del usuario, si se
permiten niveles de
aislamiento
inferiores
Estos
conceptos
se tratana en
SERIALIZABLE
el anexo
de este tema

Tema 7. Control de la concurrencia

NIVEL DE ABSTRACCIN
FSICO O INTERNO:
El SGBD implementa los
niveles de aislamiento
definidos por el usuario para
las transacciones siguiendo
una o varias tcnicas o
protocolos
Por ejemplo el SGBD Oracle
usa dos:
Bloqueos
Multiversin
Estos
conceptos se han

estudiado en la teora de
este tema
49

Aspectos de concurrencia en
SQL-92 y Oracle
SQL-92
Niveles de aislamiento de transaccin

Oracle
Niveles de aislamiento de transaccin
Tcnica multiversin
Bloqueos (candados)

Tema 7. Control de la concurrencia

50

SQL-92
Definicin de caractersticas de la transaccin que
se inicia
SET TRANSACTION modoacceso aislamiento

Modos de acceso
READ ONLY

Prohbe actualizaciones
READ WRITE (por defecto)

Nivel de aislamiento

Grado de interferencia que una transaccin tolera


cuando se ejecuta concurrentemente con otras
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE (por defecto)

Tema 7. Control de la concurrencia

51

SQL-92
Si alguna transaccin se ejecuta en algn nivel
menor al SERIALIZABLE, la seriabilidad puede ser
incumplida:
Nivel de aislamiento

Lectura
sucia

Lectura no
repetible

Lectura
fantasma

READ UNCOMMITED

READ COMMITED

No

REPEATABLE READ

No

No

SERIALIZABLE

No

No

No

Si el sistema soporta niveles distintos a SERIALIZABLE,


debera proporcionar facilidades de control explcito
de la concurrencia (sentencias LOCK y UNLOCK)

Tema 7. Control de la concurrencia

52

Oracle
Caractersticas de la transaccin
SET TRANSACTION {READ ONLY | READ WRITE} aislamiento

Nivel de aislamiento SERIALIZABLE


Si T2 serializable intenta ejecutar una sentencia LMD que
actualiza un dato que puede haber sido modificado por T1 no
confirmada en el momento de comenzar T2, entonces dicha
sentencia LMD falla
Una T serializable slo ve los cambios confirmados en el instante
en que se inicia, ms los cambios realizados por la propia
transaccin mediante INSERT, UPDATE, DELETE

Nivel de aislamiento READ COMMITED (defecto)


Si T2 read-commited intenta ejecutar una sentencia LMD que
necesita filas bloqueadas por T1, entonces espera hasta que se
liberen los bloqueos de las filas
Cada consulta ejecutada por una transaccin slo ve los datos
confirmados antes de comenzar la consulta (no la transaccin)
Tema 7. Control de la concurrencia

53

Oracle
Consistencia de lectura
Garantiza que el conjunto de datos visto por una
sentencia es consistente con respecto del instante
en el que comenz, y que no cambia durante la
ejecucin de la sentencia
Asegura que los lectores no esperan a escritores ni
a otros lectores de los mismos datos
Asegura que los escritores no esperan a los lectores
de los mismos datos
Asegura que los escritores slo esperan a otros
escritores si intentan modificar las mismas filas en
transacciones concurrentes

Tema 7. Control de la concurrencia

54

Oracle
Implementacin de consistencia de lectura
Se asemeja a que cada usuario trabaja con una copia
privada de la BD (multiversin)
Cuando ocurre una actualizacin, los valores originales
de los datos afectados, se copian en otra zona del
disco (segmentos de rollback)
Mientras la transaccin T que actualiza no se confirma,
cualquier usuario que consulte los datos modificados
ve los valores originales
Los cambios hechos por T slo quedan permanentes
cuando T es confirmada
Las sentencias (de otras transacciones) que
comienzan despus de que T se confirme ya ven los
cambios hechos por T
Nunca ocurren lecturas sucias

Tema 7. Control de la concurrencia

55

Oracle
Bloqueos
Gestin Automtica de los bloqueos
Bloqueos exclusivos y compartidos
Permiten a otras transacciones leer los datos
bloqueados, pero no modificarlos

Bloqueos de tabla o de fila (una o ms)


Los bloqueos slo se liberan la finalizar la
transaccin (COMMIT o ROLLBACK)

Gestin Manual
Se superpone al bloqueo automtico
Sentencia LOCK TABLE (no existe UNLOCK)

Tema 7. Control de la concurrencia

56

También podría gustarte