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. Introduccin y problemas de la concurrencia
2. Serializabilidad
3. Tcnicas de control de la concurrencia
4. 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. Addison-Wesley. (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
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

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

Transaccin T2

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

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

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

Tema 7. Control de la concurrencia

T2

leer_elemento(X);
X:= X+M;
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);

leer_elemento(Y);

Tema 7. Control de la concurrencia

T2

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

T1 falla y debe devolver a X su


antiguo valor; pero mientras, T2
ha ledo el valor temporal
incorrecto de X (dato sucio)
9

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

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

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

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

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

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

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

T4

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
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);

T2

T1

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

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

Planificacin A
Tema 7. Control de la concurrencia

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

Planificacin B
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 transacciones
T1
leer_elemento(X);
X:= X-N;

T2

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

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

Planificacin C: actualizacin perdida!

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

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

T2

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

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 operaciones:
operacin

abreviatura

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 ;
PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
PE: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; r1 ;
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 (ineficiencia)


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

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

KO

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 serie
Este es el objetivo de la
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 conflicto es el
mismo en ambos planes
Tema 7. Control de la concurrencia

20

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 ;
Es una planificacin serie!
PD8: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; l2(X) ; c1 ; e2(X) ; c2 ;
PD es serializable
PD9: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;
Tema 7. Control de la concurrencia

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 dirigidas
Algoritmo:

Ti

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
Crear una arista Tj Tk si Tk escribe el valor de un elemento
despus de que Tj lo haya escrito

Tj

Tema 7. Control de la concurrencia

Tk

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 equivalente a
P, mediante una ordenacin topolgica de los nodos

T1

PA

T2

Tema 7. Control de la concurrencia

T1

PB

T2

T1

T2
PC

T1

PD

T2
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

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

leer_elemento(X);
escribir_elemento(X);

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

leer_elemento(X);
escribir_elemento(X);

T3

leer_elemento(Y);
leer_elemento(Z);
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(Y);
escribir_elemento(Y);

Tema 7. Control de la concurrencia

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);

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 P...
Ejecucin 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

Tema 7. Control de la concurrencia

30

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(X);
leer_elemento(Y);
X:=X+Y;
Y:=X+Y;
escribir_elemento(X); escribir_elemento(Y);
desbloquear(X);
desbloquear(Y);

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, Y=50 (No serializable!)
Tema 7. Control de la concurrencia

T4
bloquear_lectura(Y);
leer_elemento(Y);
desbloquear(Y);

T5

bloquear_lectura(X);
leer_elemento(X);
desbloquear(X);
bloquear_escritura(Y);
leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y);
desbloquear(Y);
bloquear_escritura(X);
leer_elemento(X);
X:=X+Y;
escribir_elemento(X);
Planificacin G
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
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

Transaccin T5
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
Protocolo libre de interbloqueo

Bloqueo en dos fases estricto

el ms utilizado

T no libera ningn bloqueo exclusivo hasta terminar (con


COMMIT o ROLLBACK)

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

ms restrictivo que el B2F estricto

T no libera ningn bloqueo compartido ni exclusivo hasta


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);
[ en espera ]

El SGBD ha de reconocer un 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 abortadas


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 que


detectarlos y romperlos, por lo que en la prctica los
sistemas no suelen emplear las tcnicas de prevencin
Tema 7. Control de la concurrencia

38

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 Tk
X
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
Cuando T tiene la prioridad ms alta de todas, obtiene el bloqueo
y contina su ejecucin
Tema 7. Control de la concurrencia

46

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 a
SERIALIZABLE
Estos conceptos se tratan en
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
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE

Lectura
sucia
S
No
No
No

Lectura no
repetible
S
S
No
No

Lectura
fantasma
S
S
S
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