Anda di halaman 1dari 6

Control de concurrencia

Cuando se ejecutan varias transacciones concurrentemente en la base de datos, puede


que deje de conservarse la propiedad de aislamiento. Es necesario que el sistema controle
la interaccin entre las transacciones concurrentes.
Protocolos basados en el bloqueo
Se basa en mientras una transaccin accede a un elemento de datos, ninguna otra
transaccin puede modificar dicho elemento.
Bloqueos
a) Compartido: Ti puede leer Q pero no lo puede escribir
b) Exclusivo: Ti puede leer y escribir Q
Concesin de bloqueos
Cuando una transaccin solicita un bloqueo de un modo particular sobre un elemento de
datos y ninguna otra transaccin posee un bloqueo sobre el mismo elemento de datos en un
modo conflictivo, se puede conceder el bloqueo.
Cuando una transaccin Ti solicita un bloqueo sobre un elemento de datos Q en un modo
particular M. El gestor de control de concurrencia concede el bloqueo siempre que:

a) No exista otra transaccin que posea un bloqueo sobre Q en un modo que
est en conflicto con M.
b) No exista otra transaccin que est esperando un bloqueo sobre Qy que lo
haya solicitado antes que Ti.

Protocolos de bloqueos en dos fases
Un protocolo que asegura la secuencialidad es el protocolo de bloqueo de dos fases. Este
protocolo exige que cada transaccin realice las peticiones de bloqueo y desbloqueo de dos
fases:
a) Fase de crecimiento. Una transaccin puede obtener bloqueos pero no
puede liberarlos.
b) Fase de decrecimiento. Una transaccin puede liberar bloqueos pero no
puede obtener ninguno nuevo.

Implementacin de bloqueos
Un gestor de bloqueos se puede implementar como un proceso que recibe mensajes de
transacciones y enva mensajes como respuesta.
Tabla de bloqueos


El gestor de bloqueos procesa las solicitudes de la siguiente forma:

Cuando llega un mensaje de solicitud, aade un registro al final de la lista
enlazada del elemento de datos, si la lista enlazada existe. En otro caso
crea una nueva lista enlazada que tan slo contiene el registro
correspondiente a la solicitud.
Siempre concede la primera solicitud de bloqueo sobre el elemento de
datos. Pero si la transaccin solicita un bloqueo sobre un elemento sobre el
cual ya se ha concedido un bloqueo, el gestor de bloqueos slo concede la
solicitud si es compatible con las solicitudes anteriores, y todas stas ya se
han concedido. En otro caso, la solicitud tiene que esperar.

Cuando el gestor de bloqueos recibe un mensaje de desbloqueo de una
transaccin, borra el registro para ese elemento de datos de la lista
enlazada correspondiente a dicha transaccin. Prueba el siguiente registro,
si lo hay, como se describe en el prrafo anterior, para determinar si ahora
se puede conceder dicha solicitud. Si se puede, el gestor de bloqueos
concede la solicitud y procesa el siguiente registro, si lo hay, de forma
similar, y as sucesivamente.

Si una transaccin se interrumpe, el gestor de bloqueos borra cualquier
solicitud en espera realizada por la transaccin. Una vez que el sistema de
base de datos ha realizado las acciones apropiadas para deshacer la, libera
todos los bloqueos que mantena la transaccin abortada.

Este algoritmo garantiza que las solicitudes de bloqueo estn libres de inanicin, dado
que una solicitud nunca se puede conceder mientras no se hayan concedido las
solicitudes recibidas anteriormente.

Protocolos basados en grafos
Implica que el conjunto D se pueda ver como un grafo dirigido acclico denominado grafo de la
base de datos. Para simplificar, este apartado centra su atencin slo en aquellos grafos que
son rboles con raz.
En el protocolo de rbol slo se permite la instruccin de bloqueo bloquear-X. Cada
transaccin Ti puede bloquear un elemento de datos al menos una vez y debe seguir las
siguientes reglas:
El primer bloqueo de Ti puede ser sobre cualquier elemento de datos.
Posteriormente, Ti puede bloquear un elemento de datos Q slo si Ti est
bloqueando actualmente al padre de Q.
Los elementos de datos bloqueados se pueden desbloquear en cualquier
momento.
Ti no puede bloquear de nuevo un elemento de datos que ya haya
bloqueado y desbloqueado anteriormente.

Protocolos basados en marcas temporales
Para determinar el orden de secuencialidad es seleccionar previamente un orden entre las
transacciones. En el metodo mas comun se usa el metodo ordenacin por marcas temporales.
Marcas temporales
El sistema de base de datos asigna esta marca temporal antes de que comience la ejecucin de
Ti. Si a la transaccin Ti se le ha asignado la marca temporal MT(Ti) y una nueva transaccin Tj
entra en el sistema, entonces MT(Ti) < MT(Tj). Existen dos mtodos simples para implementar
este esquema:

Usar el valor del reloj del sistema como marca temporal; es decir, la marca
temporal de una transaccin es igual al valor del reloj en el momento en el
que la transaccin entra en el sistema.
Usar un contador lgico que se incrementa cada vez que se asigna una
nueva marca temporal; es decir, la marca temporal de una transaccin es
igual al valor del contador en el momento en el cual la transaccin entra
en el sistema.
Las marcas temporales de las transacciones determinan el orden de secuencia. De este
modo, si MT(Ti)< MT(Tj) entonces el sistema debe asegurar que toda planificacin que
produzca es equivalente a una planificacin secuencial en la cual la transaccin Ti
aparece antes que la transaccin Tj.
Para implementar este esquema se asocia a cada elemento de datos Q dos valores de
marca temporal:
marca_temporal-E(Q) denota la mayor marca temporal de todas las
transacciones que ejecutan con xito escribir(Q).
marca_temporal-L(Q) denota la mayor marca temporal de todas las
transacciones que ejecutan con xito leer(Q).

Protocolo de ordenacin por marcas temporales
Asegura que todas las operaciones leer y escribir conflictivas se ejecutan en el
orden de las marcas temporales. Este protocolo opera como sigue:

1. Supngase que la transaccin Ti ejecuta leer(Q).
a) Si MT(Ti) < marca_temporal-E(Q) entonces Ti necesita leer un valor de Q
que ya se ha sobrescrito. Por tanto se rechaza la operacin leer y Ti se
retrocede.
b) Si MT(Ti) marca_temporal-E(Q) entonces se ejecuta la operacin leer y
marca_temporalL(Q) se asigna al mximo de marca_temporalL(Q) y de
MT(Ti).
2. Supngase que la transaccin Ti ejecuta escribir (Q).
a) Si MT(Ti) < marca_temporal-L(Q) entonces el valor de Q que produce Ti se
necesita previamente y el sistema asume que dicho valor no se puede
producir nunca. Por tanto, se rechaza la operacin escribir y Ti se
retrocede.
b) Si MT(Ti) < marca_temporal-E(Q) entonces Ti est intentando escribir un
valor de Q obsoleto. Por tanto, se rechaza la operacin escribir y Ti se
retrocede.
c) En otro caso se ejecuta la operacin escribir y MT(Ti) se asigna a
marca_temporal-E(Q).
Protocolos basados en validacin
Cuando los conflictos entre las transacciones son raros se pueden aplicar tcnicas optimistas,
evitando los protocolos anteriores (ms costosos).
Las fases son, en orden:
1. Fase de lectura. Durante esta fase tiene lugar la ejecucin de la transaccin Ti.
Se leen los valores de varios elementos de datos y se almacenan en variables
locales de Ti. Todas las operaciones escribirse realizan sobre las variables
locales temporales sin actualizar la base de datos actual.
2. Fase de validacin. La transaccin Ti realiza una prueba de validacin para
determinar si puede copiar a la base de datos las variables locales temporales
que tienen los resultados de las operaciones escribir sin causar una violacin
de la secuencialidad.
3. Fase de escritura. Si la transaccin Ti tiene xito en la validacin (paso 2)
entonces las actualizaciones reales se aplican a la base de datos. En otro caso,
Ti se retrocede.
Tratamiento de interbloqueos
Existen dos mtodos principales para tratar el problema de los interbloqueos. Se puede utilizar
un protocolo de prevencin de interbloqueos para asegurar que el sistema nunca llega a un
estado de interbloqueo. De forma alternativa se puede permitir que el sistema llegue a un
estado de interbloqueo, y tratar de recuperarse despus a travs de un esquema de deteccin
y recuperacin de interbloqueos.
Prevencin de interbloqueos
El esquema ms simple para la primera aproximacin exige que cada transaccin bloquee
todos sus elementos de datos antes de comenzar su ejecucin.
Otro esquema para prevenir interbloqueos consiste en imponer un orden parcial a todos los
elementos de datos y exigir que una transaccin bloquee un elemento de datos slo en el
orden que especifica dicho orden parcial.
Deteccin y recuperacin de interbloqueos
Para ello, el sistema debe:
Mantener informacin sobre la asignacin de los elementos de datos a las
transacciones, as como de toda peticin de elemento de datos pendiente.
Proporcionar un algoritmo que use esta informacin para determinar si el sistema ha
entrado en un estado de interbloqueo.
Recuperarse del interbloqueo cuando el algoritmo de deteccin determine que existe
un interbloqueo.
Otros modelos: Basados en tiempo y grafos de espera.
Recuperacin de interbloqueos
Cuando un algoritmo de deteccin de interbloqueos determina que existe un interbloqueo, el
sistema debe recuperarse del mismo. La solucin ms comn es retroceder una o ms
transacciones para romper el interbloqueo. Se deben realizar tres acciones
Formas: Seleccin de una vctima (determinar la Ti a retroceder y romper), retroceso
(retroceder), inanicin (seleccin factores de coste).
Operaciones insertar, borrar
Borrar(Q) borra de la base de datos el elemento de datos Q.
Insertar(Q) inserta en la base de datos el nuevo elemento de datos Q y le asigna un
valor inicial.
Verificar si se ejecutar alguna Ti extra.
Fenmeno fantasma
T29 y T30 no acceden a ninguna tupla comn, y sin embargo estn en conflicto! En efecto, T29
y T30estn en conflicto en una tupla fantasma. Si se realiza el control de concurrencia con
granularidad de tupla, no se detecta dicho conflicto. Este problema recibe el nombre de
fenmeno fantasma.
Coocurrencia en estructura de ndice.
La primera tcnica se denomina protocolo del cangrejo: Cuando se busca un valor clave, el
protocolo del cangrejo bloquea primero el nodo raz en modo compartido. Cuando se recorre
el rbol hacia abajo, adquiere un bloqueo compartido sobre el siguiente nodo hijo. Despus de
adquirir el bloqueo sobre el nodo hijo, libera el bloqueo sobre el nodo padre. Repite este
proceso hasta que alcanza un nodo hoja.

Anda mungkin juga menyukai