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 cronogramas (historiales) de transacciones de bases de datos . El protocolo utiliza bloqueos , aplicados por una transacción a los datos, que pueden bloquear (interpretados como señales para detener) que otras transacciones accedan 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 bloqueos. Al utilizar bloqueos que bloquean procesos, 2PL, S2PL y SS2PL pueden estar sujetos a bloqueos 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 se ha 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 :
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 de la siguiente manera: cada transacción nunca debe adquirir un bloqueo después de haberlo liberado. La propiedad de serialización está garantizada para una programación con transacciones que obedecen esta regla.
Por lo general, sin conocimiento explícito en una transacción al final de la fase 1, la regla se determina de manera segura solo cuando una transacción ha completado su procesamiento y ha solicitado confirmación. En este caso, todos los bloqueos se pueden liberar 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 mientras espera otros bloqueos. El 2PL conservador evita los bloqueos .
Para cumplir con el estricto protocolo de bloqueo en dos fases (S2PL), una transacción debe cumplir con el 2PL y liberar sus bloqueos de escritura (exclusivos) solo después de que la transacción haya finalizado (es decir, se haya confirmado o abortado ). Por otro lado, los bloqueos de lectura (compartidos) se liberan regularmente durante la fase de contracción.
A diferencia de 2PL, S2PL ofrece rigurosidad (un caso especial de recuperabilidad sin cascada). Este protocolo no es adecuado para los árboles B porque provoca cuellos de botella (mientras que los árboles B siempre comienzan la búsqueda desde la raíz principal). [ cita requerida ]
o Rigor , o Programación rigurosa , o Bloqueo riguroso en 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 la transacción haya finalizado (es decir, se haya confirmado o cancelado). Una transacción que cumple con el SS2PL solo tiene una fase 1 y carece de una fase 2 hasta que la transacción se haya completado. Cada programa SS2PL también es un programa S2PL, pero no al revés.