Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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)
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).
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
Y:=Y+N; escribir_elemento(Y);
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)
9
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
leer_elemento(X);
Y:=Y+N; escribir_elemento(Y);
Tema 7. Control de la concurrencia
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
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);
Existe algn modo de identificar las ejecuciones que est garantizado que protegen la consistencia de la base de datos?
Teora de la Serializabilidad
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
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
l e c r
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
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
Dos maneras de definir la equivalencia entre planificaciones: Equivalencia por conflictos Equivalencia de vistas
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
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
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
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
T1
T1
Y
T2
Y,Z
leer_elemento(X); escribir_elemento(X);
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
T1
leer_elemento(X); escribir_elemento(X);
leer_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
Planificacin F
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
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
Es necesario encontrar tcnicas que garanticen la serializabilidad, sin tener que verificar a posteriori
Tema 7. Control de la concurrencia
26
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
28
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*
29
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
31
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
Fase de contraccin
T puede liberar bloqueos existentes T no puede adquirir ningn bloqueo
Tema 7. Control de la concurrencia
33
34
Inconvenientes
El B2F puede limitar el grado de concurrencia en un plan Emplear bloqueos puede provocar problemas de ...
35
el ms utilizado
T no libera ningn bloqueo compartido ni exclusivo hasta terminar (con COMMIT o ROLLBACK) planificacin estricta
Tema 7. Control de la concurrencia
36
37
38
39
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
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
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
43
44
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
45
46
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
Y tambin...
nmero de elementos en la BD carga de trabajo para la gestin de bloqueos, y espacio ocupado por la informacin de bloqueo
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
49
Oracle
Niveles de aislamiento de transaccin Tcnica multiversin Bloqueos (candados)
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)
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
Si
el sistema soporta niveles distintos a SERIALIZABLE, debera proporcionar facilidades de control explcito de la concurrencia (sentencias LOCK y UNLOCK)
52
Oracle
Caractersticas de la transaccin
SET TRANSACTION {READ ONLY | READ WRITE} aislamiento
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
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
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)
56