Descarga la aplicación para disfrutar aún más
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.
Compartir