Concurrencia

Anuncio
Jose Manuel Perez
Daniel Futrillé
Prof. Ana Aguilera
1 Introducción
2 Concepto de Transacciones
2.1 Propiedades de las transacciones
2.2 Condiciones de terminación de una transacción
2.3 Caracterización de transacciones
2.4 Transacciones y planificadores
2.5 Ejecución concurrente de transacciones
2.5.1 Motivos para la ejecución concurrente
2.5.2 Seriabilidad
2.5.3 Anomalías de Ejecución
2.5.4 Control de concurrencia basado en lock (cerraduras)
2.6 Tipos de Transacciones
2.7 Estructura de transacciones
2.8 Aspectos relacionados al procesamiento de transacciones
3 Conceptos relacionados con el control de concurrencia
3.1 Administración de locks
3.2 Deadlocks prevención y detección
3.3 Técnicas de cerraduras especializadas
3.4 Control de Concurrencia sin locking
Hasta este momento, las primitivas básicas de acceso que se han considerado
son las consultas. Sin embargo, no se ha discutido qué pasa cuando, por
ejemplo, dos consultas tratan de actualizar el mismo elemento de datos, o si
ocurre una falla del sistema durante la ejecución de una consulta. Dada la
naturaleza de una consulta, de lectura o actualización, a veces no se puede
simplemente reactivar la ejecución de una consulta, puesto que algunos datos
pueden haber sido modificados antes de la falla. El no tomar en cuenta esos
factores puede conducir a que la información en la base de datos contenga
datos incorrectos.
El concepto fundamental aquí es la noción de "ejecución consistente" o
"procesamiento confiable" asociada con el concepto de una consulta. El
concepto de una transacción es usado dentro del dominio de la base de datos
como una unidad básica de cómputo consistente y confiable.
Una transacción es una ejecución de un programa de usuario, visto por el
DBMS como una serie de operaciones lecturas y escrituras, la cual accede a la
base de datos que es compartida por varios usuarios en forma simultánea. Es
una colección de acciones que hacen transformaciones de los estados de un
sistema preservando la consistencia del mismo.
Una base de datos está en un estado consistente si obedece todas las
restricciones de integridad definidas sobre ella. Los cambios de estado ocurren
debido a actualizaciones, inserciones, y supresiones de información. Por
supuesto, se quiere asegurar que la base de datos nunca entra en un estado de
inconsistencia. Sin embargo, durante la ejecución de una transacción, la base
de datos puede estar temporalmente en un estado inconsistente. El punto
importante aquí es asegurar que la base de datos regresa a un estado
consistente al fin de la ejecución de una transacción.
La Base de
Datos en
estado
consistente
Inicio de Transacción
T1
La Base de Datos
temporalmente en un
estado inconsistente
durante la ejecución de la
transacción
Ejecución de la
Transacción T1
La Base de
Datos en
estado
consistente
Fin de Transacción T1
Para fines de recuperación el sistema necesita mantenerse al tanto de cuando
la transacción se inicia, termina y se confirma o aborta, así el gestor de
recuperación se mantiene al tanto de las siguientes operaciones:
• INICIO_DE_TRANSACCIÓN: marca el inicio de la ejecución de la transacción
• LEER o ESCRIBIR: especifican operaciones de lectura o escritura de
elementos de la base de datos que se efectúan como parte de una transacción.
• FIN_DE_TRANSACCIÓN: especifica que las operaciones de leer o escribir
han terminado y marca el límite de la ejecución de la transacción. Sin embargo,
puede ser necesario verificar si los cambios introducidos por la transacción se
pueden aplicar permanentemente a la base de datos (Confirmar) o si debe
abortarse porque viola el control de concurrencia o por alguna otra razón.
• CONFIRMAR_TRANSACCIÓN: señala que la transacción terminó con éxito y
que cualquier actualización ejecutada por ella se puede confirmar sin peligro en
la base de datos y no se cancelarán.
• ABORTAR: indica que la transacción terminó sin éxito y que cualquier cambio
o efecto que pueda ser aplicado a la base de datos debe ser cancelado.
Se hacen necesarios mecanismos de control de concurrencia y de recuperación
para garantizar estos estados.
Diagrama de Transición de estados para la
ejecución de transacciones
Operaciones y Cuerpo de una Transacción:
Begin transaction : inicio de la transacción
Read a : lectura del objeto a
Write a : escritura del objeto a
Rollback : anulación de la transacción
Commit : fin de la transacción
Begin transaction T
O1
O2
.
.
.
On
Commit T
Oi e conjunto de
operaciones
Propiedades de las transacciones:
•
•
Atomicidad: Se refiere al hecho de que una transacción se trata como una
unidad de operación. Por lo tanto, o todas las acciones de la transacción se
realizan o ninguna de ellas se lleva a cabo. La atomicidad requiere que si una
transacción se interrumpe por una falla, sus resultados parciales deben ser
deshechos. La actividad referente a preservar la atomicidad de transacciones
en presencia de abortos debido a errores de entrada, sobrecarga del sistema
o interbloqueos se le llama recuperación de transacciones. La actividad de
asegurar la atomicidad en presencia de caídas del sistema se le llama
recuperación de caídas.
Consistencia: La consistencia de una transacción es simplemente su
correctitud. En otras palabras, una transacción es un programa correcto que
lleva la base de datos de un estado consistente a otro con la misma
característica. Debido a esto, las transacciones no violan las restricciones de
integridad de una base de datos.
Propiedades de las transacciones:
•
Aislamiento: Una transacción en ejecución no puede revelar sus resultados a
otras transacciones concurrentes antes de su commit. Más aún, si varias
transacciones se ejecutan concurrentemente, los resultados deben ser los
mismos que si ellas se hubieran ejecutado de manera secuencial
(seriabilidad).
•
Durabilidad: Es la propiedad de las transacciones que asegura que una vez
que una transacción hace su commit, sus resultados son permanentes y no
pueden ser borrados de la base de datos. Por lo tanto, los DBMS aseguran
que los resultados de una transacción sobrevivirán a fallas del sistema. Esta
propiedad motiva el aspecto de recuperación de bases de datos, el cual trata
sobre como recuperar la base de datos a un estado consistente en donde
todas las acciones que han hecho un commit queden reflejadas.
Ejemplo: transferencia de fondos
1. read(A)
2. A := A – 50
3. write(A)
4. read(B)
5. B := B + 50
6. write(B)
Transacción para
transferir $50 de la
cuenta A a la cuenta B
• Consistencia: la suma de A y B no debe
cambiar por la ejecución de la transacción
• Atomicidad: si la transacción falla entre los
pasos 3 y 6, el sistema debe asegurar que los
cambios no se reflejen en la BD
• Aislamiento: si entre los pasos 3 y 6 se le
permite a otra transacción acceder a los datos
parcialmente modificados, verá un estado
inconsistente de la BD
• Durabilidad: una vez que el usuario ha sido
notificado que la transacción se realizó, los
cambios deben persistir a pesar de fallas
Condiciones de terminación de una transacción:
Una transacción siempre termina, aun en la presencia de fallas. Si una
transacción termina de manera exitosa se dice que la transacción hace un
commit. Si la transacción se detiene sin terminar su tarea, se dice que la
transacción aborta. Cuando la transacción es abortada, su ejecución es
detenida y todas sus acciones ejecutadas hasta el momento son deshechas
(undone) regresando a la base de datos al estado antes de su ejecución. A esta
operación también se le conoce como rollback.
Caracterización de transacciones:
Las acciones de lectura y escritura se utilizan como base para caracterizar a las
transacciones. Los elementos de datos que lee una transacción se dice que
constituyen el conjunto de lectura (RS). Similarmente, los elementos de
datos que una transacción escribe se les denomina el conjunto de escritura
(WS). Note que los conjuntos de lectura y escritura no tienen que ser
necesariamente disjuntos. La unión de ambos conjuntos se le conoce como el
conjunto base de la transacción (BS = RS U WS).
Ejemplo: Los conjuntos de lectura y escritura de la siguiente transacción:
RS[Reservación] = { FLIGHT.STSOLD, FLIGHT.CAP }
WS[Reservación] = { FLIGHT.STSOLD, FC.FNO, FC.DATE, FC.NAME,
FC.SPECIAL }
Transacciones y Planificaciones (Schedules):
Hasta ahora conocemos que una transacción es vista por el DBMS como una
serie, o lista, de acciones las cuales ejecutan operaciones de lectura y
escritura en elementos de la Base de Datos. También sabemos que una
transacción debe especificar su acción de finalización como commit (Finalizó
exitosamente) o abort (finalizó pero deshizo todas las acciones llevadas a
cabo).
Ahora, una planificación, es una lista de acciones (lecturas, escrituras, abortos o
commit) de un conjunto de transacciones, y el orden que el cual dos acciones
de una transacción T aparecen en una Planificación debe ser el mismo orden
en el cual aparecen en T. En otras palabras una Planificación representa una
secuencia de ejecución actual o potencial el cual describe las acciones de las
transacciones así como son vistas por el DBMS.
Ejemplo de una Planificación :
T1
T2
R(A)
Una Planificación completa es aquella que
contiene todas las acciones de cada transacción
que aparecen en el.
W(A)
R(B)
W(B)
Commit
R(C)
W(C)
Commit
Si las acciones de diferentes transacciones no
están entrelazadas (las acciones son ejecutadas
de inicio a fin, una por una) la llamamos una
Planificación Serial o Secuencial.
Ejecución concurrente de transacciones
Conociendo el concepto de planificación, ahora se puede describir
ejecuciones entrelazadas o interleaved de transacciones.
El DBMS entrelaza las acciones de diferentes transacciones para mejor el
rendimiento, en términos de incrementar el promedio de transacciones
completadas en un determinado tiempo o mejorar los tiempos de respuestas
de las transacciones cortas.
Motivos para ejecución concurrente:
La Planificación mostrada en la siguiente figura muestra una ejecución
entrelazada de dos transacciones.
Asegurar el aislamiento de las
transacciones mientras se permite
la ejecución concurrente es difícil,
pero es necesario, hay que mejorar
el rendimiento.
Seriabilidad:
Cualquier ejecución de un conjunto de transacciones es correcta si es libre
de interferencias.
Una planificación Serializable es una equivalencia de alguna de las
ejecuciones seriales de las transacciones. Si cada transacción preserva
consistencia, cada planificación serializable preserva consistencia.
Anomalías que surgen con la ejecución entrelazadas
La ejecución entrelazadas de transacciones sin control puede
resultar en una base de datos inconsistente.
Problemas de:
– Pérdida de la actualización:
Diferentes ejecuciones entrelazadas pueden producir
valores finales diferentes.
– Lectura inconsistente:
Existen ejecuciones entrelazadas que violan RI.
– Lectura irreproducible:
Existen ejecuciones entrelazadas donde el valor
desplegado no es el mismo.
-Sobreescribiendo datos inconsistente
-Existe una transacción que sobreescribe un valor, el cual había sido modificado
por otra transacción mientras esta estaba corriendo.
Conflictos de WR:
T1:
T2:
R(A), W(A),
R(A), W(A), C
R(B), W(B), Abort
Conflictos de WR:
T1:
T2:
R(A),
R(A), W(A), C
R(A), W(A), C
Conflictos de WW:
T1:
T2:
W(A),
W(A), W(B), C
W(B), C
Planificación Invocando a transacciones Abortadas
Una transacción siempre termina, aun en la
presencia de fallas. Si una transacción termina de
manera exitosa se dice que la transacción hace un
compromiso. Si la transacción se detiene sin
terminar su tarea, se dice que la transacción
aborta.
Cuando la transacción es abortada, puede ser por
distintas razones relacionadas con la naturaleza de
la transacción misma, o por conflicto con otras
transacciones o por fallo de un proceso o
computador, entonces su ejecución es detenida y
todas las acciones ejecutadas hasta el momento
son deshechas regresando a la base de datos al
estado antes de su ejecución. A esta operación
también se la conoce como rollback.
Control de Concurrencia Basado en Lock:
En los algoritmos basados en candados, las transacciones indican sus intenciones
solicitando candados al despachador (llamado el administrador de candados) Los
candados son de lectura , también llamados compartidos, o de escritura , también
llamados exclusivos.
En sistemas basados en candados, el despachador es un administrador de
candados . El administrador de transacciones le pasa al administrador de
candados la operación sobre la base de datos (lectura o escritura) e información
asociada, como por ejemplo el elemento de datos que es accedido y el
identificador de la transacción que está enviando la operación a la base de datos.
Tipos de Transacciones:
Las transacciones pueden pertenecer a varias clases. Las transacciones pueden
ser agrupadas a lo largo de las siguientes dimensiones:
Áreas de aplicación. En primer lugar, las transacciones se pueden ejecutar en
aplicaciones no distribuidas. Las transacciones que operan en datos
distribuidos se les conoce como transacciones distribuidas.
Tiempo de duración. Tomando en cuenta el tiempo que transcurre desde que se
inicia una transacción hasta que se realiza un commit o se aborta, las
transacciones pueden ser de tipo batch o en línea.
Estructura. Considerando la estructura que puede tener una transacción se
examinan dos aspectos: si una transacción puede contener a su vez
subtransacciones o el orden de las acciones de lectura y escritura dentro de
una transacción
Estructuras de las Transacciones:
Las transacciones planas consisten de una secuencia de operaciones primitivas
encerradas entre las palabras clave begin y end. Por ejemplo,
Begin_transaction Reservación
...
end.
En las transacciones anidadas las operaciones de una transacción pueden ser así
mismo transacciones. Por ejemplo,
Begin_transaction Reservación
...
Begin_transaction Vuelo
...
end. {Vuelo}
...
Begin_transaction Hotel
...
end.
...
end.
Aspectos relacionados al procesamiento de transacciones:
•
Modelo de estructura de transacciones: considerar si las transacciones son
planas o pueden estar anidadas.
•
Consistencia de la base de datos interna: Los algoritmos de control de
datos semántico tienen que satisfacer siempre las restricciones de integridad
cuando una transacción pretende hacer un commit.
•
Algoritmos de control de concurrencia: Los algoritmos de control de
concurrencia deben sincronizar la ejecución de transacciones concurrentes
bajo el criterio de correctitud. La consistencia entre transacciones se garantiza
mediante el aislamiento de las mismas.
•
Protocolos de control de réplicas: El control de réplicas se refiere a cómo
garantizar la consistencia mutua de datos replicados. Por ejemplo se puede
seguir la estrategia read-one-write-all (ROWA).
Conceptos relacionados con el control de concurrencia:
Planificación serial: recordamos el
concepto antes visto; para cada transacción
T participando en el Planificación, todas las
operaciones de T se ejecutan
consecutivamente en la Planificación; sino, T
es no serial.
Planificaciones Equivalentes: Para que
dos Planificaciones sean equivalentes, las
operaciones aplicadas a cada dato afectado
por las planificaciones deben ser aplicadas
en ambas planificaciones en el mismo orden
Planificación serializable: equivalente a
alguna Planificación serial
T1
read (A)
A := A-50
write (A)
T2
read (A);
temp := A * 0.1
A := A – temp
write (A)
read (B)
B := B+50
write (B)
Commit
read (B)
B:=B+temp
write (B)
Commit
Plan Serializable
Conceptos relacionados con el control de concurrencia:
Serializabilidad:
Un plan serializable implica que el plan es correcto
• Deja la base de datos en un estado consistente
• El intercalamiento es apropiado y resultará en un estado como si las
transacciones fueran ejecutadas secuencialmente, pero será eficiente debido a la
ejecución concurrente.
La serializabilidad es difícil de verificar
• El intercalamiento de las operaciones ocurre en el sistema operativo a través de
un planificador
• Difícil determinar de antemano como las operaciones serán intercaladas
Enfoque práctico:
Protocolos asegurando la serializabilidad a través del uso de Candados (locks)
Propósito del Control de Concurrencia:
En general, reforzar el aislamiento (a través de la exclusión mutua) entre
transacciones conflictivas.
En particular, evitar los problemas de:
• Actualización perdida
• Actualización temporal
• Suma incorrecta
Problema de la Actualización Perdida:
Ocurre cuando dos transacciones que acceden los mismos datos tienen sus
operaciones intercaladas de forma que hacen que el valor de un dato sea
incorrecto.
T1
read_item (X)
X := X-N
T2
read_item (X)
X := X+M
write_item (X)
read_item (Y)
Y:= Y+N
write_item (Y)
Commit
write_item (X)
Commit
X tiene un valor incorrecto
porque la actualización de T1 se
pierde
Problema de la de la actualización temporal:
Ocurre cuando una transacción actualiza un dato y después falla. El dato
actualizado es accedido por otra transacción antes de cambiar su valor al
original.
T1
read_item (X)
X := X-N
write_item (X)
T2
read_item (X)
X := X+M
write_item (X)
Commit
read_item (Y)
Abort
T1 falla y debe regresar el valor
modificado de X al original; T2
leyó temporalmente el valor
incorrecto de X.
Problema de la suma incorrecta:
Si una transacción está calculando una función matemática sobre un conjunto
de tuplas mientras que otras transacciones están actualizándolas, el
resultado puede ser incorrecto.
T1
T3
sum :=0
read_item(A)
sum := sum+A
read_item (X)
X := X-N
write_item (X)
read_item(Y)
Y := Y+N
write_item(Y)
Commit
read_item(X)
sum:=sum+X
read_item(Y)
sum :=sum+Y
Commit
T3 lee X después de sustraer N y
lee Y antes de sumar N: el
resultado es incorrecto
Protocolos basados en candados (Locks):
Es un conjunto de reglas seguidas por todas las transacciones para solicitar y
liberar candados. Un candado es un mecanismo de control de acceso
concurrente a un dato
Los datos pueden tener candados en dos modos:
• Modo exclusivo (X). El dato puede ser leído y escrito. Un candado en este
modo se solicita con la instrucción lock-X
• Modo compartido (S). El dato solo puede ser leído. Un candado en este
modo se solicita con la instrucción lock-S.
Las transacciones indican sus intenciones solicitando candados al despachador
(llamado el administrador de candados). La transacción puede proceder
solo después de que una solicitud es otorgada.
Protocolos basados en candados:
Como se aprecia en la tabla siguiente, los candados de lectura presentan
conflictos con los candados de escritura, dado que las operaciones de
lectura y escritura son incompatibles.
• Un candado es otorgado si el candado
solicitado es compatible con otros candados
previamente otorgados.
• Se pueden tener varios candados
compartidos sobre un dato, pero sólo un
candado exclusivo.
• Si un candado no puede ser concedido, la
transacción que lo solicita debe esperar a
que todos los candados incompatibles sean
El poner candados no es suficiente liberados.
para garantizar serializabilidad
Protocolo de candado en dos fases (2PL):
Asegura planificaciones serializables.
Fase 1: Crecimiento
• Una transacción puede solicitar/obtener candados
• Una transacción no puede liberar candados
Fase 2: reducción
• Una transacción puede liberar candados
• Una transacción no puede obtener candados
En los candados de dos fases una transacción le pone un candado a un objeto
antes de usarlo. Cuando un objeto es bloqueado con un candado por otra
transacción, la transacción solicitante debe esperar. Cuando una
transacción libera un candado, ya no puede solicitar más candados.
Protocolo de candado en dos fases (2PL):
Una transacción que utiliza candados de dos fases se comporta como en la
siguiente figura. En la primera fase solicita y adquiere todos los candados
sobre los elementos que va a utilizar y en la segunda fase libera los
candados obtenidos uno por uno.
Protocolo de candado en dos fases (2PL):
La importancia de los candados de dos fases es que se ha demostrado de
manera teórica que todos los planificadores generados por algoritmos de
control de concurrencia que obedecen a los candados de dos fases son
serializables.
Abortos en Cascada: Puede suceder si una transacción aborta después de
liberar un candado, otras transacciones que hayan accedido el mismo
elemento de datos aborten también.
Para evitar lo anterior, los despachadores para candados de dos fases
implementan lo que se conoce como los candados estrictos de dos fases
en los cuales se liberan todos los candados juntos cuando la transacción
termina (con commit o aborta).
Ver la siguiente figura.
Protocolo de candado en dos fases (2PL):
Problemas de los protocolos basados en candados: abrazo mortal:
Abrazo mortal: dos transacciones esperan mutuamente a que la otra libere un
candado.
Prevención: una transacción pone un candado a todos los datos a los que se
refiere antes de comenzar su ejecución.
Evitar: si una transacción intenta crear un ciclo, entonces se echa para atrás
(roll back) esa transacción.
Problemas de los protocolos basados en candados: inanición:
Ocurre cuando una transacción en particular consistentemente espera o es
reinicializada y nunca tiene la posibilidad de seguir adelante.
Esta limitación es característica de todos los mecanismos de planificación
basados en prioridades (estampillas de tiempo).
Tecnicas de cerraduras Especializadas
Lecturas fantasma
Una transacción vuelve a ejecutar una consulta, devolviendo un conjunto de filas
que satisfacen una condición de búsqueda y encuentra que otras filas que
satisfacen la condición que han sido insertadas por otra transacción cursada.
Control de Concurrencia sin locking
Control de concurrencia optimista
Los algoritmos de control de concurrencia discutidos antes son por naturaleza
pesimistas. En otras palabras, ellos asumen que los conflictos entre
transacciones son muy frecuentes y no permiten el acceso a un dato si existe una
transacción conflictiva que acceda al mismo dato. Así, la ejecución de cualquier
operación de una transacción sigue la secuencia de fases: validación (V), lectura
(R), cómputo (C) y escritura (W). Los algoritmos optimistas, por otra parte,
retrasan la fase de validación justo antes de la fase de escritura. De esta manera,
una operación sometida a un despachador optimista nunca es retrasada.
• Database Management, Ramakrishnan Gehrke
• Sistema de bases de datos, Elmasri Navathe
• http://www.utm.mx/~caff/perso/index.html
• http://www.cs.princeton.edu/courses/archive/spr00/cs425/slides/
• https://dpt-info.u-strasbg.fr/doc/oracle/server.102/b14220/transact.htm
• www.cs.ust.hk/~dimitris
• codex.cs.yale.edu/avi/db-book
• http://www.cs.cinvestav.mx/SC/prof_personal/adiaz/Disdb/Cap_5.html
• http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/MonogSO/
TRANS02.htm
• http://es.tldp.org/Postgresql-es/web/navegable/user/x3589.html
Descargar