Vous êtes sur la page 1sur 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. 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 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
leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y);
T1 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

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

Tema 7. Control de la concurrencia

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

leer_elemento(Y);

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

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 suma:=0; leer_elemento(A); suma:= suma+A; leer_elemento(X); suma:= suma+X; leer_elemento(Y); suma:= suma+Y;

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

leer_elemento(X);

T4 lee X antes de restar N

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

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

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 B

Planificacin A
Tema 7. Control de la concurrencia

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

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

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

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

Planificacin C: actualizacin perdida!

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

l e c r

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

KO

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: Crear un nodo por cada transaccin Ti en P

Ti

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

Tk

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

T1

PA

T2

T1

PB

T2

T1
PC

T2

T1

PD

T2
23

Tema 7. Control de la concurrencia

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

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

T1
Y

T2
Y,Z

leer_elemento(X); escribir_elemento(X);

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

T3
Hay dos ciclos: T1T2T1 y T1T2T3T1
24

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

leer_elemento(X);
escribir_elemento(X);

Planificacin E

7.2 Serializabilidad
Ejemplo de planificacin 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);
T2

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

T1

leer_elemento(X); escribir_elemento(X);
leer_elemento(Z);

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

T1
Y

X,Y

T2
Y,Z

leer_elemento(Y); escribir_elemento(Y);

T3
La planificacin serie equivalente es T3 T1 T2
25

leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X);

Planificacin F

Tema 7. Control de la concurrencia

7.2 Serializabilidad
Aplicaciones de la serializabilidad
Planificador de Tareas del SO Carga del sistema Momento de introduccin de las transacciones Prioridades de los procesos ...

Parece, pues, que habra que comprobar si P es serializable una vez ejecutadas las transacciones incluidas en P...
Ejecucin de Transacciones
reintentar Cancelar el efecto de P

Planificacin P (ordenamiento de las operaciones)

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)

P serializable? SI OK

NO

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
27

Tema 7. Control de la concurrencia

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); T4 bloquear_lectura(Y); leer_elemento(Y); desbloquear(Y); T5

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

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

Tema 7. Control de la concurrencia

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


COMMIT o ROLLBACK)

el ms utilizado

T no libera ningn bloqueo exclusivo hasta terminar (con


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
47

Tema 7. Control de la concurrencia

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

Tema 7. Control de la concurrencia

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 Modos de acceso
READ ONLY SET TRANSACTION modoacceso aislamiento
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:
Lectura sucia S No No No Lectura no repetible S S No No Lectura fantasma S S S No

Nivel de aislamiento READ UNCOMMITED READ COMMITED REPEATABLE READ SERIALIZABLE

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