640 likes | 790 Views
Tecnologías Cliente / Servidor Transacciones en BD. Richard Jiménez V. clienteserver.wordpress.com.
E N D
Tecnologías Cliente / Servidor Transacciones en BD Richard Jiménez V. clienteserver.wordpress.com
La mayoría de las bases de datos se utilizan en entornos multi-usuario, en los que muchos clientes utilizando la misma aplicación, o muchas aplicaciones cada una con uno o muchos clientes acceden a la misma base de datos. Cada una de esas aplicaciones enviará consultas al gestor, y normalmente cada hilo de ejecución será una transacción diferente.
En la mayoría de los sistemas operativos actuales, las diferentes tareas o hilos se ejecutan de forma intercalada (incluso en el caso de máquinas con varios procesadores). Es decir, el sistema operativo decide por su cuenta cuando suspender una de las tareas y darle un poco de tiempo de ejecución a otra. Si hay tareas simultáneas o concurrentes sobre la misma base de datos, esta intercalación puede resultar en que las lecturas y escrituras de las diferentes tareas o aplicaciones en el medio físico se realicen en cualquier orden y secuencia. El acceso simultáneo descrito puede dar como resultados información inconsistente o simplemente incorrecta, dependiendo de la mala o buena suerte que tengamos en la intercalación de las lecturas y escrituras simultáneas. Esta problemática ha llevado a diseñar e implementar diferentes estrategias de control de concurrencia, que se encargan de evitar todos esos problemas, de modo que los desarrolladores de las aplicaciones pueden “olvidarse” de ellos al escribir su código.
Transacciones Concurrentes • Una transacción es una secuencia de operaciones realizadas como una sola unidad lógica de trabajo. Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades de atomicidad, coherencia, aislamiento y durabilidad (ACID), para ser calificada como transacción.
Propiedades • Atomicidad • Una transacción debe ser una unidad atómica de trabajo, tanto si se realizan todas sus modificaciones en los datos, como si no se realiza ninguna de ellas. • Coherencia • Cuando finaliza, una transacción debe dejar todos los datos en un estado coherente. En una base de datos relacional, se deben aplicar todas las reglas a las modificaciones de la transacción para mantener la integridad de todos los datos. Todas las estructuras internas de datos, como índices de árbol b o listas doblemente vinculadas, deben estar correctas al final de la transacción.
Propiedades • Aislamiento • Las modificaciones realizadas por transacciones simultáneas se deben aislar de las modificaciones llevadas a cabo por otras transacciones simultáneas. Una transacción reconoce los datos en el estado en que estaban antes de que otra transacción simultánea los modificara o después de que la segunda transacción haya concluido, pero no reconoce un estado intermedio. Esto se conoce como seriabilidad, ya que deriva en la capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos en el mismo estado en que estaban después de realizar las transacciones originales.
Propiedades • Durabilidad • Una vez concluida una transacción, sus efectos son permanentes en el sistema. Las modificaciones persisten aún en el caso de producirse un error del sistema.
7. Control de la concurrencia Objetivos • Conocer la problemáticaasociada a la concurrencia de transacciones en los sistemas de bases de datos • Entender el significado de la serializabilidad y su aplicación al control de la concurrencia • Comprender algunas técnicas 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. Introducción y problemas de la concurrencia 2. Serializabilidad 3. Técnicas de control de la concurrencia 4. Granularidad de datos Tema 7. Control de la concurrencia
7. Control de la concurrencia Bibliografía [CB 2005]Connolly, T.; Begg C.:Sistemas de bases de datos. 4ª Edición. Pearson Educación. Addison Wesley. (Cap. 20) [EN 2002]Elmasri, R.; Navathe, S.B.:Fundamentos de Sistemas de Bases de Datos. 3ª Edición. Addison-Wesley. (Cap. 19 y 20) [EN 1997]Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos. Conceptos fundamentales. 2ª Edición. Addison-Wesley Iberoamericana. (Cap.17 y 18) Tema 7. Control de la concurrencia
7.1 Introducción… • Los sistemas de bases de datos, según el número 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 multiprogramación: el computador puede procesar al mismo tiempo varias transacciones • Si el equipo tiene varias CPU, es posible el procesamiento simultáneo (paralelo) de transacciones • Si sólo hay unaCPU, el SO de multiprogramación reparte el tiempo de CPU entre las transacciones: ejecución concurrente intercalada • modelo que supondremos Tema 7. Control de la concurrencia
7.1 Introducción… • 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: número de transacciones ejecutadas por minuto. • Aumentar la utilización de la CPU (menos tiempo ociosa) y Control del disco. • Reducir el tiempo medio de respuesta de transacciones (las ‘pequeñas’ 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 surgirproblemas 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 compañías aéreas. • Se almacena un registro por cada vuelo, que incluye, entre otras cosas, el número 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 Transacción T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); Transacción T2 leer_elemento(X); X:= X+M; escribir_elemento(X); • Aunque las transacciones pueden ser perfectamente correctas en sí mismas, la ejecución concurrente de T1 y T2 puede producir un resultado incorrecto, debido a la intercalación de sus operaciones, poniendo en cuestión 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 actualización perdida • T1 y T2 que acceden a los mismos datos, tienen sus operacionesintercaladas de modo que hacen incorrecto el valor de algún dato 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); El elemento X tiene un valor incorrecto porque su actualización por T1 se ‘perdió’ (se sobreescribió) Tema 7. Control de la concurrencia
7.1 … y problemas de la concurrencia Problemas potenciales provocados por la concurrencia • La actualización 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); … T2 leer_elemento(X); X:= X+M; escribir_elemento(X); T1 falla y debe devolver a X su antiguo valor; pero mientras, T2 ha leído 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 transacción T3 calcula una función 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 después T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T3 suma:=0; leer_elemento(A); suma:= suma+A; … … … leer_elemento(X); suma:= suma+X; leer_elemento(Y); suma:= suma+Y; … … … T3 lee X después de restar N, pero lee Y antes de sumar N, así que el resultado es un resumen incorrecto (discrepancia de N) Tema 7. Control de la concurrencia
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 transacción, 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); T4 leer_elemento(X); … leer_elemento(X); … T4 lee X antes de restar N T4 lee X después de restar N Tema 7. Control de la concurrencia
Planificación A Planificación B 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); 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); 7.2 Serializabilidad Motivación • Objetivo de un protocolo de control de concurrencia: • Planificar las transacciones de forma que no ocurran interferencias entre ellas, y así evitar la aparición de los problemas mencionados • Solución obvia: no permitir intercalación de operaciones de varias transacciones Tema 7. Control de la concurrencia
Planificación C: actualización perdida! Planificación D: correcta! 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); 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); 7.2 Serializabilidad Motivación • Pero el objetivo de un SGBD multiusuario también es maximizar el grado de concurrencia del sistema • Si se permite la intercalación de operaciones, existen muchos órdenes posibles de ejecución de las transacciones ¿Existe algún modo de identificar las ejecuciones que está garantizado que protegen la consistencia de la base de datos? Teoría de la Serializabilidad Tema 7. Control de la concurrencia
7.2 Serializabilidad Planificación de transacciones • Cada transacción comprende una secuencia de operaciones que incluyen acciones de lectura y escritura en la BD, que finaliza con una confirmación (commit) o anulación (rollback) • Una planificaciónP de n transacciones concurrentesT1, T2 ... Tn es una secuencia de las operaciones realizadas por dichas transacciones, sujeta a la restricción de que para cada transacciónTique participa enP, sus operaciones aparecen en Pen el mismo orden en el que ocurren enTi Tema 7. Control de la concurrencia
7.2 Serializabilidad Planificación de transacciones • Para el control de la concurrencia (y recuperación de fallos) interesa prestar mayor atención a estas operaciones: • Ejemplos de planificaciones de transacciones • El subíndice de cada operación indica la transacción 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
7.2 Serializabilidad Planificación serie • Una planificación serieP es aquella en la que las operaciones de cada transacciónse 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 planificación serie es correcta BD consistente • Pero no se garantiza que los resultados de todas las ejecuciones en serie de las mismas transacciones sean idénticos • Ejemplo: cálculo del interés de una cuenta bancaria antes o después de realizar un ingreso considerable • en general, son inaceptables en la práctica (ineficiencia) Tema 7. Control de la concurrencia
7.2 Serializabilidad Planificación no serie • Una planificación no serieP 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 ; • Hemos de determinarquéplanificaciones no serie permiten llevar la BD a un estado al que pueda llegarse mediante una ejecución en serie KO Este es el objetivo de la Serializabilidad Tema 7. Control de la concurrencia
7.2 Serializabilidad Planificación serializable • Una planificaciónP (no serie) es serializable si es equivalente a alguna planificación serie de las mismas n transacciones • Una planificación que no es equivalente a ninguna ejecución en serie, es una planificación no serializable • Toda planificación serializable es correcta • Produce los mismos resultados que alguna ejecución en serie • Dos maneras de definir la equivalencia entre planificaciones: • Equivalencia por conflictos • Equivalencia de vistas Tema 7. Control de la concurrencia
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 escribenelementos 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 escribeel mismo elemento, entran en conflicto y el orden de las operaciones sí es importante Tema 7. Control de la concurrencia
7.2 Serializabilidad Equivalencia por conflictos • En una planificación, 2 operaciones están en conflicto si • pertenecen a diferentestransacciones, • tienen acceso al mismo elementoX, • y al menos una de ellas es escribir_elemento(X) Operaciones en conflicto en las planificaciones PCy 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
7.2 Serializabilidad Planificación serializable por conflictos • Una planificación P es serializable por conflictos si equivale por conflictos a alguna planificación serie S • Podremos intercambiar cada dos operaciones de P consecutivas de transacciones distintas y sin conflicto, hasta obtener la planificación 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 ; PD8: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; l2(X) ; c1 ; e2(X) ; c2 ; PD9: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ; ¡Es una planificación serie! PD es serializable Tema 7. Control de la concurrencia
Tj Tk 7.2 Serializabilidad Detección de la serializabilidad por conflictos • Construcción del grafo de precedencia (o de serialización) • Es un grafo dirigido G = ( N, A ) • N es un conjunto de nodos y A es un conjunto de aristasdirigidas • Algoritmo: • Crear un nodo por cada transacciónTien P • Crear una aristaTjTk si Tklee el valor de un elemento después de que Tjlo haya escrito • Crear una aristaTjTk si Tkescribe el valor de un elemento después de que Tj lo haya leído • Crear una aristaTjTk si Tkescribe el valor de un elemento después de que Tj lo haya escrito Ti Tema 7. Control de la concurrencia
T1 T2 T1 T2 T1 T2 T1 T2 PA PB PD PC 7.2 Serializabilidad Detección de la serializabilidad por conflictos (y 2) • Una arista Tj Tk indica que Tj debe aparecer antes que Tken una planificación 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=((TjTk), (Tk Tp),... (TiTj)) • Si no hay ciclos en el grafo, P es serializable • Es posible obtener una planificación serie S equivalente a P, mediante una ordenacióntopológica de los nodos Tema 7. Control de la concurrencia
Y T1 T2 X Y Y,Z T3 7.2 Serializabilidad Ejemplo de planificación no serializable Transacción T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); Transacción T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); Transacción T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); Planificación E T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); Hay dos ciclos: T1→T2→T1 y T1→T2→T3→T1 Tema 7. Control de la concurrencia
T1 T2 X,Y Y Y,Z T3 7.2 Serializabilidad Ejemplo de planificación serializable Transacción T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); Transacción T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); Transacción T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); Planificación F T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); La planificación serie equivalente es T3 → T1 → T2 Tema 7. Control de la concurrencia
Parece, pues, que habría que comprobar si P es serializable una vez ejecutadas las transacciones incluidas en P... Planificador deTareas del SO • Carga del sistema • Momento de introducción de las transacciones • Prioridades de los procesos • ... Ejecución de Transacciones Planificación P (ordenamiento de las operaciones) reintentar Cancelar el efecto de P ¿P serializable? Es el SO el que distribuye los recursos para los procesos, y determina la intercalación de las operaciones de las transacciones concurrentes (ejecutadas como procesos del SO) NO SI OK 7.2 Serializabilidad Aplicaciones de la serializabilidad ¡¡enfoque muy poco práctico!! • Es necesario encontrar técnicasque garanticen la serializabilidad, sin tener que verificar a posteriori Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia • Métodos basados en la teoría 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 (automáticamente) • ... se asegura la serializabilidadde toda planificación de transacciones • Clasificación • Métodos de bloqueo • Métodos de marca de tiempo • Técnicas de multiversión • Métodos optimistas Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Métodos de bloqueo • Uso de bloqueos para controlar el acceso concurrente a los elementos de datos almacenados en la base de datos • Reglas básicas del bloqueo: • Bloqueo compartido: si una transacción 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 transacción tiene un bloqueo exclusivo sobre un elemento de datos, puede leer y actualizar (escribir) elelemento • Un bloqueo exclusivo proporciona acceso exclusivo al elemento Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Métodos de bloqueo Reglas de uso de los bloqueos 1.T debe emitir bloquear_lectura(X) o bloquear_escritura(X) antes de ejecutar una operación leer_elemento(X) 2.T debe emitir bloquear_escritura(X) antes de realizar una operación 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 reducción de bloqueos* 5.T no emitirá desbloquear(X) salvo si posee un bloqueo, compartido o exclusivo, sobre X Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Métodos de bloqueo • Cuando una transacción T solicita un bloqueo… • Si el elemento no ha sido ya bloqueado por otra transacción, 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 transacción que obtiene un bloqueo lo mantiene hasta que lo libera explícitamente o termina (commit o rollback) • Sólo cuando se libera un bloqueo exclusivo los efectos de la escritura serán visibles para las demás transacciones Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Métodos de bloqueo • Algunos sistemas permiten la mejora (o promoción) y la reducción (o degradación) de bloqueos • Aumenta el nivel de concurrencia del sistema • Si T emitió bloquear_lectura(X), más 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), más tarde puede reducirlo a un bloqueo compartido emitiendo bloquear_lectura(X) • Así permite que otras transacciones lean X Tema 7. Control de la concurrencia
Planificación G T4 bloquear_lectura(Y); leer_elemento(Y); desbloquear(Y); bloquear_escritura(X); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); T5 bloquear_lectura(X); leer_elemento(X); desbloquear(X); bloquear_escritura(Y); leer_elemento(Y); Y:=X+Y; escribir_elemento(Y); desbloquear(Y); 7.3 Técnicas de control de concurrencia Métodos de bloqueo • El uso de bloqueos para la programación de transacciones no garantiza la serializabilidad de las planificaciones Transacción T4 bloquear_lectura(Y); leer_elemento(Y); desbloquear(Y); bloquear_escritura(X); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); Transacción T5 bloquear_lectura(X); leer_elemento(X); desbloquear(X); bloquear_escritura(Y); leer_elemento(Y); Y:=X+Y; escribir_elemento(Y); desbloquear(Y); Valores iniciales: X=20, Y=30 Resultados de las planificaciones serie: T4→T5: X=50, Y=80 T5→T4: X=70, Y=50 Resultado de la planificación G: X=50, Y=50 (No serializable!) Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Métodos de bloqueo: Bloqueo en dos fases • Es necesario seguir un protocolo adicional que indique dónde colocar las operaciones de bloqueo y desbloqueo dentro de las transacciones • El más conocido es el Bloqueo en Dos Fases (B2F) • Una transacción T sigue el protocolo de bloqueo en dos fases si todas las operaciones de bloqueo preceden a la primera operación de desbloqueo • De este modo, podemos ver T dividida en dos fases: • Fase de expansión (o crecimiento) • T puede adquirirbloqueos • T no puede liberar ningún bloqueo • Fase de contracción • T puede liberarbloqueos existentes • Tno puede adquirir ningún bloqueo Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Bloqueo en dos fases • Si el sistema permite mejorar y reducir bloqueos… • La mejora sólo puede tener lugar en la fase de expansión • La reducción sólo puede realizarse en la fase de contracción • En el código de T, un bloquear_lectura(X) puede aparecer en la fase de contracción de T sólosi reduce un bloqueo exclusivo a uno compartido Transacción T4’ bloquear_lectura(Y); leer_elemento(Y); bloquear_escritura(X); desbloquear(Y); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); Transacción 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
7.3 Técnicas de control de concurrencia Bloqueo en dos fases • Si toda transacción de una planificación sigue el protocolo de bloqueo en dos fases, entonces la planificación 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
7.3 Técnicas de control de concurrencia Bloqueo en dos fases conservador o estático • T debe bloquear todos los elementos a los que tendrá acceso (lectura o escritura)antes de comenzar a ejecutarse • Si no es posible bloquear algún elemento, Tno bloqueará ninguno y esperará para reintentarlo más tarde • Protocolo libre de interbloqueo Bloqueo en dos fases estricto el más utilizado • Tno libera ningún bloqueo exclusivo hasta terminar(con COMMIT o ROLLBACK) • Ningunatransacciónlee o escribe un elementomodificadoporT, salvo si T se ha completadoplanificación estricta • Puede sufrir interbloqueo (salvo si se combina con B2F conservador) Bloqueo en dos fases riguroso más restrictivo que el B2F estricto • Tno libera ningún bloqueo compartido ni exclusivo hasta terminar(con COMMIT o ROLLBACK) planificación estricta Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia El problema del interbloqueo • Situación en la que cada una de dos (o más) transacciones está esperando a que se libere un bloqueo establecido por la otra transacción 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 más transacciones • Se deshacen sus escrituras y se liberan sus bloqueos • Así, el resto de transacciones podrá continuar su ejecución • Reiniciar automáticamente las transacciones abortadas Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia El problema del interbloqueo • Hay 3 técnicas generales para gestionar los interbloqueos • Temporizaciones de bloqueos • Prevenciónde interbloqueos • Detecciónde interbloqueos • Conviene detectarinterbloqueos 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 pequeña • En otro caso, conviene usar temporizaciones o técnicas de prevención • Es más difícil prevenir que utilizar temporizaciones o que detectarlos y romperlos, por lo que en la práctica los sistemas no suelen emplear las técnicas de prevención Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Temporizaciones de bloqueos • Una transacción que solicita un bloqueo sólo esperará durante un período de tiempo predefinido por el sistema • Si no se concede el bloqueo durante ese tiempo, se producirá un ‘fin de temporización’: el SGBD asumirá que la transacción está interbloqueada (aunque puede que no), la abortará y la reiniciará automáticamente • Es una solución muy sencilla y práctica • Pero puede hacer que sean abortadas y reiniciadas transacciones que en realidad no están en un interbloqueo Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Prevención de interbloqueos • Ordenar las transacciones usando marcas temporalesde transacción MT(T): • Identificador único para T • Las MT se ordenan según se inician las transacciones • La T más 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 abortaTj(Tj muere) y • se reinicia después con la misma marca de tiempo • Una Tjmás antigua espera a que termine otra Tk más reciente • Una Tj más reciente que solicita un elemento bloqueado por una Tkmás antigua, es abortada (muere) y reiniciada Tema 7. Control de la concurrencia
7.3 Técnicas de control de concurrencia Prevención de interbloqueos • Algoritmo Herir - Esperar • si MT(Tj) < MT(Tk) entonces se abortaTk(Tj hiere a Tk) y • se reinicia después con la mismaMT • si no, Tj puede esperar • Una Tj más reciente espera a que termine una Tk más antigua • Una Tj más antigua que solicita un elemento bloqueado por una Tkmás reciente, hace que la más reciente sea abortada (es herida) y reiniciada • Inconvenientes • Ambos algoritmos hacen que sean abortadas y reiniciadas transacciones que podrían provocar un bloqueo mortal, aunque tal cosa nunca ocurriera! • En el algoritmo Esperar-Morir, una Tj podría abortar y reiniciarse variasveces seguidas si Tkmás antigua sigue bloqueando el X que Tj solicita Tema 7. Control de la concurrencia
Tj Tk X Tj Tk 7.3 Técnicas de control de concurrencia Detección de interbloqueos • Verificación periódica del estado del sistema • ¿está en un bloqueo mortal? • Creación de un grafo de espera que muestra las dependencias entre transacciones • Crear un nodo por cada transacción en ejecución, etiquetado con el identificador de la transacción, T • Si Tj espera para bloquear el elemento X, ya bloqueado por Tk, crear una arista dirigida desde Tj a 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
7.3 Técnicas de control de concurrencia Detección de interbloqueos • Pero... ¿cuándo 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 detección con un tamaño 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 • Existirán límites superior e inferior del tamaño del intervalo Tema 7. Control de la concurrencia