Articulo de referencia

Bloqueo de dos fases

En bases de datos y procesamiento de transacciones , el bloqueo de dos fases ( 2PL ) es un método de control de concurrencia pesimista que garantiza la serialización de conflict...

En bases de datos y procesamiento de transacciones , el bloqueo de dos fases ( 2PL ) es un método de control de concurrencia pesimista que garantiza la serialización de conflictos . [ 1 ] [ 2 ] También es el nombre del conjunto resultante de secuencias de transacciones de la base de datos (historiales). El protocolo utiliza bloqueos , aplicados por una transacción a los datos, que pueden impedir (interpretados como señales de detención) que otras transacciones accedan a los mismos datos durante la vida de la transacción.

Según el protocolo 2PL, los bloqueos se aplican y se eliminan en dos fases:

  1. Fase de expansión: se adquieren bloqueos y no se libera ninguno.
  2. Fase de reducción: se liberan los candados y no se adquieren nuevos.

El protocolo básico utiliza dos tipos de bloqueos: compartidos y exclusivos . Las versiones mejoradas del protocolo básico pueden utilizar más tipos de bloqueo. Al usar bloqueos que bloquean procesos, los protocolos 2PL, S2PL y SS2PL pueden sufrir interbloqueos debido al bloqueo mutuo de dos o más transacciones.

Bloqueos de lectura y escritura

Los bloqueos se utilizan para garantizar la serialización . Una transacción mantiene un bloqueo sobre un objeto si ha adquirido un bloqueo sobre ese objeto que aún no ha sido liberado.

Para 2PL, los únicos bloqueos de acceso a datos utilizados son los bloqueos de lectura ( bloqueos compartidos ) y los bloqueos de escritura ( bloqueos exclusivos ). A continuación se muestran las reglas para los bloqueos de lectura y escritura :

  • Una transacción puede leer un objeto solo si mantiene un bloqueo de lectura o de escritura sobre dicho objeto.
  • Una transacción puede escribir en un objeto si y solo si mantiene un bloqueo de escritura sobre ese objeto.
  • Una secuencia de transacciones puede mantener varios bloqueos sobre el mismo objeto simultáneamente si y solo si ninguno de esos bloqueos es de escritura. Si un bloqueo no permitido intenta mantenerse simultáneamente, se bloqueará.

Variantes

Tenga en cuenta que todos los planes serializables por conflicto también son serializables por vista (pero no al revés).

Bloqueo de dos fases

Según el protocolo de bloqueo de dos fases , cada transacción gestiona sus bloqueos en dos fases distintas y consecutivas durante su ejecución:

  1. Fase de expansión (también conocida como fase de crecimiento): se adquieren bloqueos y no se libera ninguno (el número de bloqueos solo puede aumentar).
  2. Fase de reducción (también conocida como fase de contracción): se liberan los bloqueos y no se adquieren nuevos.

Las reglas de bloqueo de dos fases se pueden resumir de la siguiente manera: ninguna transacción debe adquirir un bloqueo después de haber liberado uno. La propiedad de serializabilidad está garantizada para una planificación con transacciones que cumplen esta regla.

Por lo general, sin conocimiento explícito en una transacción al final de la fase 1, la regla se determina de forma segura solo cuando la transacción ha completado su procesamiento y se ha solicitado la confirmación. En este caso, todos los bloqueos se pueden liberar a la vez (fase 2).

Bloqueo conservador de dos fases

El bloqueo conservador de dos fases (C2PL) se diferencia del bloqueo de dos fases (2PL) en que las transacciones obtienen todos los bloqueos que necesitan antes de que comience la ejecución. Esto garantiza que una transacción que ya posee algunos bloqueos no se quede bloqueada esperando otros. El C2PL previene los interbloqueos .

En casos de alta contención de bloqueos , C2PL reduce el tiempo promedio de retención de bloqueos, en comparación con 2PL y Strict 2PL, ya que las transacciones que mantienen bloqueos nunca se bloquean. En casos de baja contención de bloqueos, C2PL mantiene más bloqueos de los necesarios, debido a la dificultad de predecir qué bloqueos se requerirán en el futuro, lo que genera una mayor sobrecarga.

Una transacción C2PL no obtendrá ningún bloqueo si no puede obtener todos los bloqueos que necesita en su solicitud inicial. Además, cada transacción debe declarar su conjunto de lectura y escritura (los elementos de datos que se leerán/escribirán), lo cual no siempre es posible. Debido a estas limitaciones, C2PL no se utiliza con mucha frecuencia.

Bloqueo estricto de dos fases

Para cumplir con el estricto protocolo de bloqueo de dos fases (S2PL), una transacción debe cumplir con 2PL y liberar sus bloqueos de escritura (exclusivos) solo después de que la transacción haya finalizado (es decir, confirmada o abortada ). Por otro lado, los bloqueos de lectura (compartidos) se liberan regularmente durante la fase de reducción.

A diferencia de 2PL, S2PL proporciona estrictez (un caso especial de recuperabilidad sin cascada). Este protocolo no es apropiado en árboles B porque causa un cuello de botella (mientras que los árboles B siempre comienzan la búsqueda desde la raíz del padre).

Bloqueo robusto y estricto de dos fases

o Rigor , o Programación rigurosa , o Bloqueo riguroso de dos fases

Para cumplir con el bloqueo estricto de dos fases (SS2PL), los bloqueos de lectura y escritura de una transacción se liberan solo después de que esta haya finalizado (es decir, se haya confirmado o abortado). Una transacción que cumple con SS2PL solo tiene una fase 1 y carece de una fase 2 hasta que se haya completado. Toda planificación SS2PL es también una planificación S2PL, pero no a la inversa.

Véase también

Referencias

  1. Philip A. Bernstein , Vassos Hadzilacos, Nathan Goodman (1987): Control de concurrencia y recuperación en sistemas de bases de datos , Addison Wesley Publishing Company, ISBN 0-201-10715-5
  2. Gerhard Weikum , Gottfried Vossen (2001): Sistemas de información transaccional , Elsevier, ISBN 1-55860-508-8