Un grafo de precedencia , también llamado grafo de conflicto [ 1 ] y grafo de serializabilidad , se utiliza en el contexto del control de concurrencia en bases de datos . [ 2 ] Es el grafo dirigido que representa la precedencia de las transacciones en la planificación, tal como se refleja en la precedencia de las operaciones conflictivas en las transacciones. Una planificación es serializable por conflicto si y solo si su grafo de precedencia de transacciones confirmadas es acíclico .
El grafo de precedencia para una planificación S contiene:
- Un nodo para cada transacción confirmada en S
- Un arco de T i a T j si una acción de T i precede y entra en conflicto con una de las acciones de T j . Es decir, las acciones pertenecen a transacciones diferentes, al menos una de ellas es una operación de escritura y ambas acceden al mismo objeto (lectura o escritura).
Los ciclos de transacciones confirmadas pueden evitarse abortando una transacción indecisa (ni confirmada ni abortada) en cada ciclo del grafo de precedencia de todas las transacciones, lo que de otro modo podría convertirse en un ciclo de transacciones confirmadas (y una transacción confirmada no puede abortarse). Se requiere y es suficiente una transacción abortada por ciclo para romper y eliminar el ciclo (es posible realizar más abortos, y pueden ocurrir bajo ciertos mecanismos, pero son innecesarios para la serialización). La probabilidad de generación de ciclos suele ser baja, pero, no obstante, esta situación se maneja cuidadosamente, generalmente con una sobrecarga considerable, ya que está en juego la corrección. Las transacciones abortadas debido a la prevención de violaciones de serialización se reinician y se ejecutan de nuevo inmediatamente.
Ejemplos de gráficos de precedencia
Ejemplo 1
Ejemplo 2
Un grafo de precedencia del cronograma D, con 3 transacciones. Dado que existe un ciclo (de longitud 2; con dos aristas) a través de las transacciones confirmadas T1 y T2, este cronograma (historial) no es serializable por conflictos . Nótese que la confirmación de la transacción 2 no tiene ninguna relevancia para la creación de un grafo de precedencia.
Ejemplo 3

Algoritmo para probar la serializabilidad de conflictos de una planificación S, junto con un ejemplo de planificación.
- o
- Para cada transacción T x que participe en el cronograma S, cree un nodo etiquetado como T i en el grafo de precedencia. Por lo tanto, el grafo de precedencia contiene T 1 , T 2 , T 3 .
- Para cada caso en S donde T j ejecuta una lectura de elemento (X) después de que T i ejecuta una escritura de elemento (X), cree una arista (T i → T j ) en el grafo de precedencia. Esto no ocurre en ningún lugar del ejemplo anterior, ya que no hay lectura después de escritura.
- Para cada caso en S donde T j ejecuta un write_item (X) después de que T i ejecuta un read_item (X), crea una arista (T i → T j ) en el grafo de precedencia. Esto da como resultado una arista dirigida de T 1 a T 2 (ya que T 1 tiene R(A) antes de que T 2 tenga W(A) ).
- Para cada caso en S donde T j ejecuta un write_item (X) después de que T i ejecuta un write_item (X), crea una arista (T i → T j ) en el grafo de precedencia. Esto da como resultado aristas dirigidas de T 2 a T 1 , de T 2 a T 3 y de T 1 a T 3 .
- La planificación S es serializable si y solo si el grafo de precedencia no tiene ciclos. Como T1 y T2 constituyen un ciclo, el ejemplo anterior no es serializable (por conflicto).
Referencias
Enlaces externos
- En la quinta edición de "Fundamentos de los sistemas de bases de datos", se analiza el uso de grafos de precedencia en el capítulo 17, en relación con las pruebas de serializabilidad de conflictos .
- Abraham Silberschatz , Henry Korth y S. Sudarshan. 2005. Conceptos de sistemas de bases de datos (5 ed.), PP. 628–630. McGraw-Hill, Inc., Nueva York, NY, EE. UU.
- Sistemas de gestión de bases de datos