stringtranslate.com

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 . [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:

  1. Fase de expansión: se adquieren los bloqueos y no se libera ningún bloqueo.
  2. Fase de contracción: se liberan los bloqueos y no se adquieren bloqueos.

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.

Leer y escribir bloqueos

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 :

Bloqueo bifásico y sus casos especiales

Bloqueo de dos fases

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:

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

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).

Bloqueo conservador de dos fases

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 ".

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 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 ]

Fuerte bloqueo estricto de dos fases.

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:

  1. SS2PL frente a S2PL: ambos proporcionan serialización y rigor. Dado que S2PL es una superclase de SS2PL, puede, en principio, proporcionar más concurrencia. Sin embargo, normalmente no se nota en la práctica ninguna ventaja de concurrencia (existe exactamente el mismo bloqueo para ambos, con una liberación de bloqueo prácticamente no mucho más temprana para S2PL) y la sobrecarga de lidiar con un mecanismo de fin de fase 1 en S2PL, separado del final de la transacción. , no está justificado. Además, si bien SS2PL proporciona pedidos de compromiso , S2PL no. Esto explica la preferencia de SS2PL sobre S2PL.
  2. Especialmente antes de 1990, pero también después, en muchos artículos y libros, por ejemplo (Bernstein et al. 1987, p. 59), [1] el término "2PL estricto" (S2PL) ha sido definido frecuentemente por el protocolo de bloqueo "Release todos los bloqueos sólo después del final de la transacción", que es el protocolo de SS2PL. Por lo tanto, "Strict 2PL" no podría ser el nombre de la intersección de Strictness y 2PL, que es mayor que la clase generada por el protocolo SS2PL. Esto ha causado confusión. Con una definición explícita de S2PL como la intersección de Strictness y 2PL, un nuevo nombre para SS2PL y una distinción explícita entre las clases S2PL y SS2PL, los artículos (Breitbart et al. 1991) [ 3] y (Raz 1992) [4 ] han pretendido aclarar la confusión: el primero utilizando el nombre "rigurosidad" y el segundo "SS2PL".
  3. Existe una propiedad más general que SS2PL (una superclase de programación), el orden de compromiso estricto (CO estricto o SCO), que también proporciona serialización, rigor y CO, y tiene una sobrecarga de bloqueo similar. A diferencia de SS2PL, SCO no bloquea ante un conflicto de lectura-escritura (un bloqueo de lectura no bloquea la adquisición de un bloqueo de escritura; tanto SCO como SS2PL tienen el mismo comportamiento para conflictos de escritura-lectura y escritura-escritura ) a costa de un posible retraso. comprometerse, y ante dicho tipo de conflicto, SCO tiene un tiempo promedio de finalización de transacciones más corto y mejor rendimiento que SS2PL. [5] Si bien SS2PL obedece la tabla de compatibilidad de bloqueos anterior, SCO tiene la siguiente tabla:
Tenga en cuenta que, aunque SCO libera todos los bloqueos al final de la transacción y cumple con las reglas de bloqueo de 2PL, SCO no es un subconjunto de 2PL debido a su tabla de compatibilidad de bloqueos diferente. SCO permite conflictos materializados de lectura-escritura entre dos transacciones en sus fases 1, lo que 2PL no permite en la fase 1 (ver sobre conflictos materializados en Serializabilidad ). Por otro lado 2PL permite otros tipos de conflictos materializados en la fase 2 que SCO no permite en absoluto. En conjunto, esto implica que el cronograma de clases 2PL y SCO son incomparables (es decir, ninguna clase contiene a la otra clase).

Resumen: relaciones entre clases

Programar contención de clases: una flecha de la clase A a la clase B indica que la clase A contiene estrictamente a B; la falta de un camino dirigido entre clases significa que las clases son incomparables. Una propiedad es inherentemente bloqueadora si puede imponerse únicamente bloqueando las operaciones de acceso a datos de la transacción hasta que ciertos eventos ocurran en otras transacciones. (Raz 1992)

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).

Puntos muertos en 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 :

Cuando los datos se dividen entre los participantes del protocolo de compromiso atómico (por ejemplo, 2PC), la resolución automática de interbloqueos globales se ha pasado por alto en la literatura de investigación de bases de datos, aunque los interbloqueos en tales sistemas han sido un área de investigación bastante intensiva:
  • Para el CO y su caso especial SS2PL, la resolución automática mediante el protocolo de compromiso atómico se ha observado sólo en los artículos de CO. Sin embargo, se ha observado en la práctica que, en muchos casos, los mecanismos de resolución específicos detectan los bloqueos globales con muy poca frecuencia, menos de lo que podría esperarse ("¿Por qué vemos tan pocos bloqueos globales?"). La razón probablemente son los puntos muertos que se resuelven automáticamente y, por lo tanto, los mecanismos no los manejan ni los cuentan;
  • Para 2PL en general, la resolución automática mediante el (obligatorio) protocolo de punto de sincronización de fin de fase uno (que tiene el mismo mecanismo de votación que el protocolo de compromiso atómico y el mismo manejo de votos faltantes en el punto muerto de votación, lo que resulta en una resolución global del punto muerto) no ha sido mencionado hasta hoy (2009). Prácticamente solo se utiliza el caso especial SS2PL, donde no se necesita sincronización de final de fase uno además del protocolo de confirmación atómica.
En un entorno distribuido donde los datos recuperables no se dividen entre los participantes del protocolo de compromiso atómico, no existe tal resolución automática y los puntos muertos distribuidos deben resolverse mediante técnicas dedicadas.

Ver también

Referencias

  1. ^ ab Philip A. Bernstein , Vassos Hadzilacos, Nathan Goodman (1987): Recuperación y control de concurrencia 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 
  3. ^ Yuri Breitbart, Dimitrios Georgakopoulos, Marek Rusinkiewicz, Abraham Silberschatz (1991): "On Rigorous Transaction Scheduling", IEEE Transactions on Software Engineering (TSE), septiembre de 1991, volumen 17, número 9, págs. 954-960, ISSN  0098- 5589
  4. ^ Yoav Raz (1992): "El principio de ordenar compromisos o garantizar la serialización en un entorno heterogéneo de múltiples administradores de recursos autónomos utilizando el compromiso atómico" Archivado el 23 de mayo de 2007 en Wayback Machine (PDF), Actas de la Decimoctava Conferencia Internacional on Very Large Data Bases (VLDB), págs. 292-312, Vancouver, Canadá, agosto de 1992, ISBN 1-55860-151-1 (también DEC-TR 841, Digital Equipment Corporation , noviembre de 1990) 
  5. ^ Yoav Raz (1991): "Orden de compromiso estricto basado en bloqueo, o cómo mejorar la concurrencia en los administradores de recursos basados ​​en bloqueo", DEC-TR 844, diciembre de 1991.
  6. ^ Principios del procesamiento de transacciones; ISBN 9780080948416 ; Capítulo 6 Página 152