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 . [1] [2] También es el nombre del conjunto resultante de programas de transacciones de bases de datos (historiales). El protocolo utiliza bloqueos , aplicados por una transacción a los datos, que pueden bloquear (interpretados como señales para detener) el acceso de otras transacciones a los mismos datos durante la vida de la transacción.
Mediante el protocolo 2PL, los bloqueos se aplican y eliminan en dos fases:
El protocolo básico utiliza dos tipos de bloqueos: bloqueos compartidos y exclusivos . Las mejoras del protocolo básico pueden utilizar más tipos de bloqueo. Al utilizar bloqueos que bloquean procesos, 2PL puede estar sujeto a interbloqueos que resultan del bloqueo mutuo de dos o más transacciones.
Los bloqueos se utilizan para garantizar la serialización . Una transacción mantiene un bloqueo sobre un objeto si esa transacción 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 bloqueos de lectura ( bloqueos compartidos ) y bloqueos de escritura ( bloqueos exclusivos ). A continuación se detallan las reglas para bloqueos de lectura y bloqueos de escritura :
Según el protocolo de bloqueo de dos fases , cada transacción maneja sus bloqueos en dos fases distintas y consecutivas durante la ejecución de la transacción:
Las reglas de bloqueo de dos fases se pueden resumir como: cada transacción nunca debe adquirir un bloqueo después de haber liberado un bloqueo. La propiedad de serialización está garantizada para un cronograma con transacciones que obedecen a esta regla.
Normalmente, sin conocimiento explícito en una transacción al final de la fase 1, la regla se determina de forma segura solo cuando una transacción ha completado el procesamiento y ha solicitado la confirmación. En este caso, se pueden desbloquear todos los bloqueos a la vez (fase 2).
La diferencia entre 2PL y C2PL es que las transacciones de C2PL obtienen todos los bloqueos que necesitan antes de que comiencen las transacciones. Esto es para garantizar que una transacción que ya tiene algunos bloqueos no se bloquee esperando otros bloqueos. "El 2PL conservador evita estancamientos ".
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 periódicamente durante la fase de reducción. Este protocolo no es apropiado en árboles B porque causa cuellos de botella (mientras que los árboles B siempre comienzan a buscar desde la raíz principal). [ cita necesaria ]
o Rigurosidad , o Programación rigurosa , o Bloqueo riguroso de dos fases
Para cumplir con el estricto bloqueo de dos fases (SS2PL), el protocolo de bloqueo libera los bloqueos de escritura (exclusivos) y de lectura (compartidos) aplicados por una transacción solo después de que la transacción haya finalizado, es decir, solo después de completar la ejecución (estar listo ) y siendo comprometido o abortado . Este protocolo también cumple con las reglas S2PL. Se puede considerar que una transacción que obedece a SS2PL tiene la fase 1 que dura toda la ejecución de la transacción, y no tiene fase 2 (o una fase 2 degenerada). Por lo tanto, en realidad solo queda una fase, y "dos fases" en el nombre parece que todavía se usa debido al desarrollo histórico del concepto a partir de 2PL, y 2PL es una superclase. La propiedad SS2PL de un cronograma también se llama Rigurosidad . También es el nombre de la clase de programas que tienen esta propiedad, y un programa SS2PL también se denomina "programa riguroso". El término "rigurosidad" está libre del legado innecesario de "dos fases", además de ser independiente de cualquier mecanismo (de bloqueo) (en principio, se pueden utilizar otros mecanismos de bloqueo). El mecanismo de bloqueo respectivo de la propiedad a veces se denomina Riguroso 2PL .
El bloqueo estricto y fuerte de dos fases (SS2PL) es un mecanismo de serialización popular utilizado en la mayoría de los sistemas de bases de datos (en varias variantes) desde sus inicios en la década de 1970.
SS2PL es un caso especial de S2PL, es decir, la clase de horarios SS2PL es una subclase propia de S2PL (cada horario SS2PL es también un horario S2PL, pero existen horarios S2PL que no son SS2PL).
SS2PL ha sido el protocolo de control de concurrencia elegido para la mayoría de los sistemas de bases de datos y se ha utilizado desde sus inicios en la década de 1970. Ha demostrado ser un mecanismo eficaz en muchas situaciones y proporciona, además de serialización, también rigor (un caso especial de recuperabilidad sin cascada), que es fundamental para la recuperación eficiente de la base de datos , y también orden de compromiso (CO) para participar en entornos distribuidos donde un CO Se emplean soluciones de serialización distribuida y serialización global basadas en . Al ser un subconjunto de CO, existe una implementación eficiente de SS2PL distribuido sin un administrador de bloqueo distribuido (DLM), mientras que los interbloqueos distribuidos (ver más abajo) se resuelven automáticamente. El hecho de que SS2PL empleado en sistemas de bases de datos múltiples garantiza la serialización global se conocía desde años antes del descubrimiento del CO, pero sólo con el CO se comprendió el papel de un protocolo de compromiso atómico en el mantenimiento de la serialización global, así como la observación de la serialización global. resolución de punto muerto distribuido (consulte un ejemplo detallado de Distributed SS2PL ). De hecho, que SS2PL herede las propiedades de recuperabilidad y CO es más significativo que ser un subconjunto de 2PL, que por sí solo en su forma general, además de comprender un mecanismo simple de serialización (sin embargo, la serialización también está implícita en CO), no se conoce. para proporcionar a SS2PL cualquier otra cualidad significativa. No se sabe que 2PL en su forma general, así como cuando se combina con Strictness, es decir, Strict 2PL (S2PL), se utilice en la práctica. El popular SS2PL no requiere marcar "fin de fase 1" como lo hacen 2PL y S2PL y, por lo tanto, es más sencillo de implementar. Además, a diferencia del 2PL general, SS2PL proporciona, como se mencionó anteriormente, las útiles propiedades de ordenamiento de Estrictez y Compromiso .
Existen muchas variantes de SS2PL que utilizan varios tipos de bloqueo con diversas semánticas en diferentes situaciones, incluidos casos de cambio de tipo de bloqueo durante una transacción. Son notables las variantes que utilizan bloqueo de granularidad múltiple .
Comentarios:
Entre dos clases de cronograma cualesquiera (definidas por las propiedades respectivas de sus cronogramas) que tienen cronogramas comunes, una contiene a la otra ( contiene estrictamente si no son iguales) o son incomparables . Las relaciones de contención entre las clases 2PL y otras clases de programación importantes se resumen en el siguiente diagrama. 2PL y sus subclases son inherentemente bloqueantes , lo que significa que no existen implementaciones optimistas para ellos (y siempre que se menciona "2PL optimista" se refiere a un mecanismo diferente con una clase que incluye también programaciones que no están en la clase 2PL).
Los bloqueos bloquean las operaciones de acceso a datos. El bloqueo mutuo entre transacciones da como resultado un punto muerto , donde la ejecución de estas transacciones se detiene y no se puede completar. Por lo tanto, es necesario resolver los puntos muertos para completar las ejecuciones de estas transacciones y liberar los recursos informáticos relacionados. Un punto muerto es un reflejo de un ciclo potencial en el gráfico de precedencia , que ocurriría sin el bloqueo. Un punto muerto se resuelve abortando una transacción involucrada con dicho ciclo potencial y rompiendo el ciclo. A menudo se detecta mediante un gráfico de espera (un gráfico de conflictos bloqueados por bloqueos para que no se materialicen; los conflictos que no se materializan en la base de datos debido a operaciones bloqueadas no se reflejan en el gráfico de precedencia y no afectan la serialización ), que indica qué transacción está "esperando" la liberación del bloqueo mediante qué transacción, y un ciclo significa un punto muerto. Abortar una transacción por ciclo es suficiente para romper el ciclo. Si una transacción ha sido cancelada debido a la resolución de un punto muerto, depende de la aplicación decidir qué hacer a continuación. Por lo general, una aplicación reiniciará la transacción desde el principio, pero puede retrasar esta acción para dar a otras transacciones tiempo suficiente para finalizar y evitar causar otro punto muerto. [6]
En un entorno distribuido, se utiliza un protocolo de compromiso atómico, normalmente el protocolo de compromiso de dos fases (2PC), para la atomicidad . Cuando los datos recuperables (datos bajo control de transacción) se dividen entre los participantes de 2PC (es decir, cada objeto de datos está controlado por un único participante de 2PC), los interbloqueos distribuidos (globales), los interbloqueos que involucran a dos o más participantes en 2PC, se resuelven automáticamente de la siguiente manera:
Cuando SS2PL se utiliza eficazmente en un entorno distribuido, los interbloqueos globales debido al bloqueo generan interbloqueos de votación en 2PC y se resuelven automáticamente por 2PC (consulte Orden de compromiso (CO), en Caracterización exacta de interbloqueos de votación por ciclos globales ; sin referencia excepto que se sabe que los artículos CO lo notan). Para el caso general de 2PL, los interbloqueos globales se resuelven de manera similar automáticamente mediante el protocolo de punto de sincronización del final de la fase 1 en una transacción distribuida (el punto de sincronización se logra "votando" (notificando el final de la fase 1 local) y propagándose al participantes en una transacción distribuida de la misma manera que un punto de decisión en el compromiso atómico; en analogía con el punto de decisión en CO, una operación conflictiva en 2PL no puede ocurrir antes del punto de sincronización final de la fase 1, con el mismo resultado de votación estancada en el caso de un punto muerto global de acceso a datos; el punto muerto de votación (que también es un punto muerto global basado en bloqueo) se resuelve automáticamente mediante el protocolo abortando alguna transacción involucrada, con un voto faltante, generalmente usando un tiempo de espera ).
Comentario :