Logo Studenta

IV Control de concurrencia

¡Estudia con miles de materiales!

Vista previa del material en texto

Protocolos 
basados en 
bloqueo
Se basan en el bloqueo de datos. Para poder hacerlo, se requiere 
un componente adicional del SGBD que se encargue de los 
bloqueos, autorizándolos o denegándolos: es el gestor de control 
de concurrencia. Existen dos tipos de bloqueos:
● Compartidos: sólo otorgan permisos para leer un dato.
● Exclusivos: sólo otorgan permisos para leer y escribir un dato.
Es necesario que toda transacción solicite un bloqueo del modo 
apropiado sobre un elemento de datos dependiendo de los tipos de 
operaciones que se vayan a realizar sobre el mismo. La petición se 
hace al gestor de control de concurrencia. La transacción puede 
realizar la operación sólo después de que el gestor de control de 
concurrencia conceda el bloqueo a la transacción.
Los bloqueos son compatibles unos con otros solamente en el caso 
en el que dos transacciones estén pidiendo un bloqueo compartido. 
En ese caso, ambas transacciones pueden leer el dato, pero 
ninguna otra transacción podrá escribir en él. Para que otra 
transacción pueda escribir ese dato, tiene que esperar a que el 
mismo se desbloquee (soltar el bloqueo). Lo mismo ocurre si una 
transacción tiene el bloqueo exclusivo: aquellas que pidan otro 
bloqueo exclusivo o compartido sobre el mismo dato deben esperar 
a que se suelte el bloqueo. Es importante tener en cuenta que el 
orden de las operaciones en una transacción nunca se altera: una 
transacción no puede hacer otras tareas mientras espera a que se 
suelte un bloqueo.
Protocolo de bloqueo de 2 fases
Este protocolo exige que cada transacción realice las peticiones de 
bloqueo y desbloqueo de dos fases: en la fase de crecimiento la 
transacción debe pedir todos los bloqueos que necesita, lo que hace que 
aumente la cantidad de bloqueos, pero no puede liberarlos. El punto de la 
planificación en el cual la transacción obtiene su bloqueo final (el final de la 
fase de crecimiento) es el punto de bloqueo: en este punto, la transacción 
tiene todos los bloqueos que necesita y puede realizar todas sus 
operaciones. Recién ahí empieza a desbloquear todos los datos en la fase 
de decrecimiento y lo hace hasta que se compromete, pero en esta etapa 
no puede realizar más peticiones de bloqueo y, por ende, no obtendrá 
nuevos bloqueos.
Este esquema es secuenciable en cuanto a conflictos: las 
planificaciones que se realicen bajo este esquema van a ser equivalentes a 
planificaciones secuenciales en donde aquellas transacciones que llegaron 
antes a su punto de bloqueo van antes en un esquema secuencial. Es 
decir, el orden de las transacciones va a estar dado por su punto de 
bloqueo. Esto soluciona el problema de la lectura no repetible. Pero 
puede haber deadlocks.
Sin embargo, este esquema no resuelve la posibilidad del retroceso en 
cascada. Por eso se trabaja con versiones menos flexibles de este 
protocolo.
Estricto
La transacción debe mantener todos sus bloqueos exclusivos hasta que se 
comprometa. Este requisito asegura que todo dato que escribe una transacción no 
comprometida está bloqueado en modo exclusivo hasta que la transacción se 
completa, evitando que ninguna otra transacción lea el dato.
Riguroso
La transacción debe mantener todos sus bloqueos hasta que se comprometa. En este 
esquema la secuencialidad se da en función al momento en el que se compromete la 
transacción: en una planificación secuencial se ejecuta antes una transacción que se 
comprometió antes bajo el esquema de 2 fases riguroso. Estos esquemas solucionan 
la posibilidad de retroceso en cascada ya que ninguna transacción podrá leer un dato 
modificado por otra transacción hasta que esta última se comprometa.
Protocolo de bloqueo de 2 fases con intención de bloqueo
Está basado no solamente en el bloqueo, sino también en la granularidad: 
divide la base de datos en zonas (tablas), éstas se subdividen en archivos 
(bloques/páginas) y finalmente, estos últimos se dividen en registros. 
Permite obtener no sólo un bloqueo sobre un elemento de datos, sino que 
también pueden bloquearse tablas, archivos e incluso toda la base de 
datos.
En función de esto, pueden identificarse bloqueos implícitos y explícitos: al 
pedir un bloqueo (exclusivo o compartido) sobre la base, una tabla o un 
archivo (bloqueo explícito) quedan implícitamente bloqueados los niveles 
inferiores que dependen del elemento bloqueado.
El problema es que, al momento de pedir un bloqueo, hay que verificar 
todos los nodos (superiores e inferiores) para chequear que no haya otros 
bloqueos que impidan la concesión del que se está solicitando. Para 
resolver esto es que se añade la intención de bloqueo: si un nodo se 
bloquea en modo intencional se está haciendo un bloqueo explícito en un 
nivel inferior del árbol. Se piden bloqueos intencionales sobre los niveles 
superiores al elemento que se quiere bloquear. Demuestran la intención de 
bloquear de forma exclusiva o compartida un nodo jerárquicamente inferior. 
Una transacción que quiera bloquear un nodo debe recorrer el camino en el 
árbol desde la raíz hasta dicho nodo. Durante el recorrido del árbol la 
transacción bloquea los distintos nodos en un modo intencional.
Asegura la secuencialidad en cuanto a conflictos.
Esquemas 
multiversión
Cada operación de escritura crea una nueva versión de del dato. 
Cuando se realiza una operación de lectura, el gestor de control de 
concurrencia elige una de las versiones del dato que se va a leer, 
asegurando que dicha elección se haga de tal manera que asegure 
la secuencialidad. Un bloqueo impediría que una transacción lea un 
dato que haya sido modificado por otra hasta que esta última suelte 
el bloqueo. Trabajar con varias versiones permite que la 
transacción que necesita el dato puede leer la versión anterior del 
mismo para asegurar la secuencialidad.
Ordenación por marcas temporales multiversión
Cada transacción tiene asignada una marca temporal (MT) antes de que 
comience su ejecución. Si a la transacción se le ha asignado la marca 
temporal y una nueva transacción entra en el sistema, entonces
Las marcas temporales pueden implementarse a través de un reloj o un 
contador lógico. Esto permite saber el orden de cada una en el plan de 
ejecución, de acuerdo con la siguiente regla:
Si 𝑀𝑇 (𝑇x) < 𝑀𝑇 (𝑇y) ⇒ el plan es secuenciable a uno donde 𝑇𝑥 se ejecute 
antes que 𝑇𝑦 .
Es por esto que la marca temporal implica la secuencialidad de las 
transacciones.
Bloqueo de 2 fases multiversión
Las transacciones de actualización realizan un bloqueo de dos fases 
riguroso; es decir, mantienen todos los bloqueos hasta el final de la 
transacción. Así, se pueden secuenciar según su orden de terminación. No 
tienen una marca temporal asignada cuando se crean. Las transacciones 
de lectura sí tienen marca temporal asignada cuando se crean, al valor del 
contador, y para realizar las lecturas siguen el protocolo de ordenación por 
marcas temporales multiversión.

Continuar navegando