1. El problema de la actualizacin perdida. Cuando dos transacciones
que tienen acceso a los mismos elementos de la base de datos tienen sus operaciones intercaladas de modo que hacen incorrecto el valor de algn elemento. Esto ocurre si una transaccin sobrescribe el valor de un elemento, que ya ha sido modificado previamente por otra transaccin que an est en ejecucin, ocasionando la prdida de la modificacin previa. Ej: Valor inicial de X es 10. Valor final de X es 20 y no 30 Transaccin A Tiempo Leer_elemento(X) T1 X:=X+10 T2 Escribir_elemento(X) T3 T4 Transaccin B Leer_elemento(X) X:=X+10 Escribir_elemento(X) Transaccin B Escribir_elemento(X) (X se modifica a 20) Abortar (X se restaura a 10) Transaccin A Tiempo T1 Leer_elemento(X) T2 T3 PROBLEMAS DE CONTROL DE CONCURRENCIA 2. El problema de la actualizacin temporal (dependencia no comprometida). Esto ocurre cuando una transaccin actualiza un elemento de la base de datos y luego la transaccin falla. Otra transaccin tiene acceso al elemento actualizado antes de que se restaure su valor original. Ej: Valor inicial de X es 10 Observacin: La transaccin A lee una modificacin no comprometida (lectura sucia) en el tiempo T2, que se deshace en el tiempo T3. Como resultado, la transaccin A puede producir resultados incorrectos. PROBLEMAS DE CONTROL DE CONCURRENCIA 2. El problema de la actualizacin temporal (dependencia no comprometida). Ej: Valor inicial de X es 10 Observacin: La transaccin A actualiza una modificacin no comprometida en el tiempo T2, y pierde esa actualizacin en el tiempo T3 (otra versin de la actualizacin perdida) e esa actualizacin en el tiempo T3. Transaccin A Tiempo T1 Escribir_elemento(X) T2 (X se modifica a 30) T3 Transaccin B Escribir_elemento(X) (X se modifica a 20) Abortar (X se restaura a 10) PROBLEMAS DE CONTROL DE CONCURRENCIA 3. El problema del resumen incorrecto (anlisis inconsistente). Si una transaccin est calculando una funcin agregada de resumen sobre varios registros mientras otras transacciones estn actualizando algunos de ellos, puede ser que la funcin agregada calcule algunos valores antes de que se actualicen y otros despus de actualizarse. 3. El problema del resumen incorrecto (anlisis inconsistente). Ej: Sean los valores iniciales de A:=40, B:=50 y C:=30 Transaccin A Tiempo Leer_elemento(A) T1 Suma:=Suma+A Leer_elemento(B) T2 Suma:=Suma+B T3 T4 T5 T6 T7 Leer_elemento(C) T8 Transaccin B Leer_elemento(C) C:=C-10 Escribir_elemento(C) Leer_elemento(A) A:=A+10 Escribir_elemento(A) Confirmar Suma:=Suma+C (Observacin: Suma es 110, no 120) PROBLEMAS DE CONTROL DE CONCURRENCIA 4. Lectura repetible. Ocurre cuando una transaccin lee un elemento dos veces y otra transaccin modifica el elemento entre las dos lecturas. As la primera transaccin recibe diferentes valores en sus dos lecturas del mismo elemento Ej: si el valor inicial de X es 10 Transaccin A Tiempo Leer_elemento(X) T1 T2 Leer_elemento(X) T3 Transaccin B Escribir_elemento(X) (X se modifica a 20) TCNICAS DE CONTROL DE CONCURRENCIA BLOQUEO La nocin bsica del bloqueo consiste en que cuando una transaccin requiere la seguridad de que algn objeto (casi siempre un registro de la base de datos) no cambiar de alguna manera no predecible, adquiere un bloqueo sobre ese objeto. El efecto del bloqueo es bloquear el acceso de otras transacciones al objeto, y en particular evitar que lo modifiquen Funcionamiento del bloqueo: 1. Primero, suponemos la existencia de dos tipos de bloqueo: Bloqueos exclusivos (bloqueos X) y bloqueos compartidos (bloqueos S). 2. Si la transaccin A tiene bloqueo exclusivo (X) sobre el registro R, una solicitud por parte de la transaccin B de cualquier tipo de bloqueo sobre R har que B entre en un estado de espera. B esperar hasta que se libere el bloqueo de A. TCNICAS DE CONTROL DE CONCURRENCIA Funcionamiento del bloqueo: 3. Si una transaccin A tiene un bloqueo compartido (S) sobre el registro R: a) una solicitud por parte de la transaccin B de bloqueo X sobre R har que B entre en un estado de espera (B esperar hasta que se libere el bloqueo de A. b) una solicitud por parte de la transaccin B de un bloqueo S sobre R ser concedida (es decir, B tendr tambin ahora un bloqueo S sobre R). Las tres caractersticas anteriores pueden resumirse en una matriz de compatibilidad de tipos de bloqueo X S - X N N S Guin = no hay bloqueo S N S S N indica un conflicto - S S S S indica compatibilidad TCNICAS DE CONTROL DE CONCURRENCIA Funcionamiento del bloqueo: 4. Las solicitudes de bloqueo sobre registros por parte de las transacciones son implcitas. Cuando se quiere leer un registro, se solicita implcitamente un bloqueo compartido (S) sobre el registro. Cuando se quiere escribir un registro, se solicita implcitamente un bloqueo exclusivo (X) sobre el registro. Se permite la promocin de bloqueo S a bloqueo X dentro de una misma transaccin. 5. Los bloqueos X se mantienen hasta el trmino exitoso o no de la transaccin. Lo normal es que los bloqueos S se mantengan tambin hasta ese momento. As, el bloqueo garantiza planes seriables y estrictos. DESVENTAJAS: Bloqueo mutuo, Limitacin del grado de concurrencia, Espera indefinida (si una transaccin no puede continuar durante un perodo indeterminado, mientras otras transacciones continan con normalidad. como sucedera si el esquema de espera es injusto y confiera a algunas transacciones mayor prioridad que otras), Inanicin debido a los algoritmos que resuelven el bloqueo mortal. Solucin al problema de la actualizacin perdida utilizando la tcnica del bloqueo Transaccin A Tiempo Transaccin B (X:=10) Leer_elemento(X) T1 (Adquiere bloqueo S) X:=X+10 T2 Leer_elemento(X) (Adquiere bloqueo S) X:=X+10 Escribir_elemento(X) T3 Espera T4 Escribir_elemento(X) Espera (Bloqueo Mutuo) Solucin al problema de la actualizacin temporal utilizando la tcnica del bloqueo Transaccin A Tiempo Transaccin B (X:=10) T1 Escribir_elemento(X) (Adquiere bloqueo X) (X se modifica a 20) Leer_elemento(X) T2 Espera T3 Abortar (X se restaura a 10) (libera el bloqueo X) Continuar: Leer_elemento(X) T4 (Adquiere bloqueo S) Solucin al problema de la actualizacin temporal utilizando la tcnica del bloqueo Transaccin A Tiempo Transaccin B (X:=10) T1 Escribir_elemento(X) (Adquiere bloqueo X) (X se modifica a 20) Escribir_elemento(X) T2 Espera T3 Abortar (X se restaura a 10) (libera el bloqueo X) Continuar: Escribir_elemento(X) T4 (Adquiere bloqueo X) Solucin al problema del resumen incorrecto utilizando el bloqueo Transaccin A Tiempo Transaccin B (A:=40, B:=50,C:=30) Leer_elemento(A) T1 (Adquiere bloqueo S sobre A) Suma:=Suma+A Leer_elemento(B) T2 (Adquiere bloqueo S sobre B) Suma:=Suma+B T3 Leer_elemento(C) (Adquiere bloqueo S sobre C) C:=C-10 T4 Escribir_elemento(C) (Adquiere bloqueoX sobre C (se promueve)) T5 Leer_elemento(A) (Adquiere bloqueo S sobre A) A:=A+10 T6 Escribir_elemento(A) Espera Leer_elemento(C) T7 Espera (Bloqueo Mutuo) BLOQUEO MUTUO (DEADLOCK, ABRAZO MORTAL) Es una situacin en la cual dos o ms transacciones estn en un estado de espera simultneo, y cada una espera la liberacin de un bloqueo por parte de otra para poder continuar. En la prctica los bloqueos mutuos casi nunca implican ms de dos transacciones. PREVENCIN DEL BLOQUEO MUTUO Algunas esquemas que evitan el bloqueo mutuo aplican el concepto de marca de tiempo de la transaccin MT(T). Las marcas de tiempo se ordenan con base en el orden en que se inician las transacciones (la transaccin ms antigua tiene la ms alta prioridad). Dos esquemas son esperar-morir y herir-esperar. Supongamos que la transaccin T i solicita un bloqueo sobre el elemento X, pero X est bloqueado por otra transaccin T j , con un bloqueo en conflicto. Esperar-morir (Wait-die): Si MT(T i ) < MT(T j ) (T i es ms antigua que T j ) entonces T i espera; de lo contrario se aborta T i y se le reinicia posteriormente con la misma marca de tiempo. BLOQUEO MUTUO (DEADLOCK, ABRAZO MORTAL, BLOQUEO MORTAL) PREVENCIN DEL BLOQUEO MUTUO Herir-esperar (Wound-wait): Si MT(T i ) < MT(T j ) (T i es ms antigua que T j ) entonces se aborta T j (T i hiere a T j ) y se le reinicia posteriormente con la misma marca de tiempo; de lo contrario T i espera. Ambos esquemas hacen que aborte una transaccin ms reciente que podran intervenir en un bloqueo mutuo, a pesar de que tal vez nunca provoquen un bloqueo mutuo. Estas dos tcnicas evitan el bloqueo mutuo. El Protocolo de bloqueo de dos fases conservador tambin puede prevenir bloqueos mutuos, requiere que toda transaccin bloquee por adelantado todos los elementos que vaya a necesitar, si no es posible obtener algunos de los elementos, no se bloquear ninguno de ellos, y la transaccin tendr que esperar hasta que todos los bloqueos se hagan disponibles. Limita la concurrencia, la transaccin adquiere todos los bloqueos desde el inicio. BLOQUEO MUTUO (DEADLOCK, ABRAZO MORTAL, BLOQUEO MORTAL) DETECCIN DE BLOQUEO MUTUO La deteccin de un bloqueo muto implica la deteccin de un ciclo en la GRFICA DE ESPERA, donde se indica quin est esperando a quin. Algunos sistemas se limitan a utilizar un mecanismo de tiempos de espera y suponen que una transaccin que no ha realizado trabajo alguno durante algn periodo especificado est en bloqueo mutuo. Algunos sistemas seleccionan como vctima, al proceso con el menor tiempo de uso de CPU. La transaccin elegida como vctima es cancelada, y algunos sistemas la reinician de manera automtica. Otros sistemas se limitan a enviar un cdigo de retorno vctima de bloqueo mutuo de vuelta a la aplicacin. El algoritmo de seleccin de vctimas puede conferir prioridades ms altas a las transacciones que se han abortado varias veces, a fin de que no se escojan como vctimas una y otra vez. PROTOCOLO DE BLOQUEO DE DOS FASES BSICO Se dice que una transaccin sigue el protocolo bloqueo de dos fases si todas las operaciones de bloqueo (bloquear_lectura, bloquear_escritura) preceden a la primera operacin de desbloqueo en la transaccin. Una transaccin as puede dividirse en dos fases: FASE DE EXPANSIN: (o de crecimiento) durante la cual se pueden adquirir nuevos candados sobre elementos, pero no se puede liberar ninguno. PROTOCOLO DE BLOQUEO DE DOS FASES BSICO FASE DE CONTRACCIN: durante la cual se pueden liberar los candados existentes, pero no se pueden adquirir nuevos candados. Si se permite promover candados (esto es, que una transaccin emita una operacin bloquear_lectura(X) y ms adelante emita una operacin bloquear_escritura (X)), esta definicin no cambia. Pero si tambin se permite la degradacin de candados (esto es, que una transaccin emita una operacin bloquear_escritura(X) y ms adelante emita una operacin bloquear_lectura (X), la definicin debe alterarse ligeramente. Todas las degradaciones deben efectuarse en la fase de contraccin. As, una operacin bloquear_lectura(X) que degrada un candado de escritura que ya se tena sobre X slo puede aparecer en la fase de contraccin de la transaccin. VENTAJAS: Garantiza planes seriables. DESVENTAJAS: Los planes no evitan la reversin en cascada, Bloqueo mutuo, Limitacin del grado de concurrencia, Espera indefinida (si una transaccin no puede continuar durante un perodo indeterminado, mientras otras transacciones continan con normalidad. como sucedera si el esquema de espera es injusto y confiera a algunas transacciones mayor prioridad que otras), Inanicin debido a los algoritmos que resuelven el bloqueo mortal. Ejemplo: T1 bloquear_lectura(Y) leer_elemento(Y) bloquear_escritura(X) desbloquear(Y) leer_elemento(X) X := X + Y escribir_elemento(X) desbloquear(X) PROTOCOLO DE BLOQUEO DE DOS FASES BSICO CONTROL DE CONCURRENCIA BASADO EN ORDENAMIENTO POR MARCA DE TIEMPO (BSICO) En las tcnicas de bloqueo el orden de las transacciones en el plan en serie equivalente se basa en el orden en que las transacciones en ejecucin bloquean los elementos que requieren. Un enfoque distinto implica el uso de marcas de tiempo de las transacciones para ordenar la ejecucin de las transacciones segn un plan en serie equivalente. MARCA DE TIEMPO: es un identificador nico dado por el sistema para identificar una transaccin. Los valores se asignan en el orden en que las transacciones se introducen en el sistema, se le puede considerar como el tiempo de inicio de una transaccin T como MT(T). ALGORITMO DE ORDENAMIENTO POR MARCA DE TIEMPO: Se basa en ordenar las transacciones con base en sus marcas de tiempo. El plan ser seriable, y el plan en serie equivalente tendr las transacciones en orden segn sus valores de marca de tiempo. Para evitar que el orden en que se tiene acceso a un elemento por ms de una transaccin no viole la seriabilidad del plan, el algoritmo asocia a cada elemento X de la base de datos, dos valores de marca de tiempo: 1. MT_lectura(X); esta es la ms grande de todas las marcas de tiempo de las transacciones que han ledo con xito el elemento X. 2. MT_escritura(X); esta es la ms grande de todas las marcas de tiempo de las transacciones que han escrito con xito el elemento X. El algoritmo debe verificar si se viola el ordenamiento por marca de tiempo de las transacciones en estos dos casos: 1. La transaccin T emite una operacin escribir_elemento(X): a. Si MT_lectura(X) > MT(T) o MT_escritura(X) > MT(T) entonces T aborta y se rechaza la operacin, se vuelve a introducir T con nueva marca de tiempo; b. De otro modo, se ejecuta la operacin y se asigna MT_escritura(X) := MT(T) 2. La transaccin T emite una operacin leer_elemento (X): a. Si MT_escritura(X) > MT(T) se debe abortar T y rechazar la operacin, se vuelve a introducir T con una nueva marca de tiempo. b. Si MT_escritura MT(T) se ejecuta la operacin y MT_lectura(X) := mayor { MT(T), MT_lectura(X) } VENTAJAS: Garantiza planes seriables, No hay bloqueo mortal DESVENTAJAS: No garantiza que los planes sean recuperables, No evitan la reversin en cascada, Puede ocurrir la INANICION si una transaccin se aborta y reinicia continuamente. CONTROL DE CONCURRENCIA BASADO EN ORDENAMIENTO POR MARCA DE TIEMPO (BSICO) Un elemento de la base de datos manejado por las tcnicas de control de concurrencia puede ser: Un registro de la base de datos, Un valor de campo de un registro de la base de datos, Un bloque de disco, Un archivo completo, La base de datos completa. Cuanto mayor sea el tamao del elemento, menor ser el grado de concurrencia permitido. Cuanto menor sea el tamao del elemento, el sistema tendr una mayor cantidad de elementos por gestionar, adems requerir mas espacio de almacenamiento. En general, el tamao es uniforme, pero para las tcnicas que permiten tamaos variables, el tamao ad-hoc depender del tipo de las transacciones implicadas. GRANULARIDAD DE LOS DATOS Se ha centrado la atencin en las operaciones leer y escribir, las cuales accesan a elementos de datos ya existentes. Sin embargo las transacciones tambin necesitan de las operaciones que permitan crear y borrar elementos de datos. INSERTAR(X): inserta en la base de datos el nuevo elemento de datos X y le asigna un valor inicial. En un entorno de bloqueo, se da a T un bloqueo de escritura (exclusivo) para el elemento X. En el protocolo de ordenacin por marcas de tiempo, se fijan los valores MT_lectura(X) y MT_escritura(X) a MT(T). OPERACIONES DE INSERCIN Y ELIMINACIN ELIMINAR(X): elimina de la base de datos el elemento de datos X. En un entorno de bloqueo, tambin se da a T un bloqueo de escritura (exclusivo) para el elemento X. En el protocolo de ordenacin por marcas de tiempo, Si MT_lectura(X) > MT(T) o MT_escritura(X) > MT(T) entonces abortar y revertir T y rechazar la operacin; de lo contrario ejecutar la operacin eliminar(X). OPERACIONES DE INSERCIN Y ELIMINACIN PROBLEMA DEL FANTASMA: ocurre cuando un registro que est siendo insertado por alguna transaccin T satisface una condicin que deber satisfacer un conjunto de registros a los que tenga acceso otra transaccin T. Aun cuando las transacciones estn en conflicto desde un punto lgico, no hay realmente ningn registro en comn entre las dos transacciones, ya que T puede haber bloqueado el conjunto de registros antes de que T insertara el nuevo registro. El registro que causa el conflicto es un registro fantasma que ha aparecido repentinamente en la base de datos al ser insertado. REGISTROS FANTASMAS Una solucin al problema del fantasma es el llamado bloqueo de ndice. (Un ndice incluye entradas que tienen un valor de atributo, ms un conjunto de apuntadores a todos los registros del archivo que tienen ese valor). Toda transaccin que inserte un registro en una tabla debe insertar informacin en cada uno de los ndices que se mantengan en la tabla. Si la entrada del ndice correspondiente se bloquea antes de que se pueda tener acceso al registro mismo ser posible detectar el conflicto por el registro fantasma: La razn es que la transaccin T solicitara un candado de lectura para la entrada de ndice correspondiente y T solicitara un candado de escritura para esa misma entrada. Puesto que los bloqueos del ndice estn en conflicto, el problema del fantasma se detectara. REGISTROS FANTASMAS