Control de concurrencia de DBMS: marca de tiempo y protocolos basados en bloqueo
¿Qué es el control de concurrencia?
Control de concurrencia En un sistema de gestión de bases de datos, es un procedimiento que permite gestionar operaciones simultáneas sin que entren en conflicto entre sí. Garantiza que las transacciones de la base de datos se realicen de forma simultánea y precisa para producir resultados correctos sin violar la integridad de los datos de la base de datos respectiva.
El acceso simultáneo es bastante fácil si todos los usuarios solo leen datos. No hay forma de que puedan interferir entre sí. Sin embargo, para cualquier base de datos práctica, tendría una combinación de operaciones de LECTURA y ESCRITURA y, por lo tanto, la concurrencia es un desafío.
El control de concurrencia de DBMS se utiliza para abordar este tipo de conflictos, que se producen principalmente en sistemas multiusuario. Por lo tanto, el control de concurrencia es el elemento más importante para el correcto funcionamiento de un sistema de gestión de bases de datos donde se ejecutan dos o más transacciones de bases de datos simultáneamente, que requieren acceso a los mismos datos.
Posibles problemas de concurrencia
A continuación se detallan algunos problemas que probablemente enfrentará al utilizar el método de control de simultaneidad de DBMS:
- Actualizaciones perdidas ocurre cuando varias transacciones seleccionan la misma fila y actualizan la fila según el valor seleccionado
- Los problemas de dependencia no confirmada ocurren cuando la segunda transacción selecciona una fila que es actualizada por otra transacción (lectura sucia)
- Lectura no repetible ocurre cuando una segunda transacción intenta acceder a la misma fila varias veces y lee datos diferentes cada vez.
- Problema de resumen incorrecto ocurre cuando una transacción resume el valor de todas las instancias de un elemento de datos repetido y la segunda transacción actualiza algunas instancias de ese elemento de datos específico. En esa situación, el resumen resultante no refleja un resultado correcto.
¿Por qué utilizar el método de concurrencia?
Las razones para utilizar el método de control de concurrencia son DBMS:
- Aplicar aislamiento mediante exclusión mutua entre transacciones en conflicto
- Para resolver problemas de conflictos de lectura-escritura y escritura-escritura
- Preservar la coherencia de la base de datos mediante la preservación constante de las obstrucciones de ejecución.
- El sistema necesita controlar la interacción entre las transacciones concurrentes. Este control se logra mediante esquemas de control concurrente.
- El control de concurrencia ayuda a garantizar la serialización
Ejemplo
Supongamos que dos personas acuden al mismo tiempo a quioscos electrónicos para comprar una entrada de cine para la misma película y en el mismo horario.
Sin embargo, sólo queda un asiento disponible para la proyección de la película en esa sala en particular. Sin control de concurrencia en DBMS, es posible que ambos espectadores acaben comprando una entrada. Sin embargo, el método de control de concurrencia no permite que esto suceda. Ambos espectadores aún pueden acceder a la información escrita en la base de datos de asientos de cine. Pero el control de concurrencia sólo proporciona un ticket al comprador que haya completado primero el proceso de transacción.
Protocolos de control de concurrencia
Los distintos protocolos de control de concurrencia ofrecen diferentes ventajas en cuanto a la cantidad de concurrencia que permiten y la cantidad de sobrecarga que imponen. A continuación, se presentan las técnicas de control de concurrencia en DBMS:
- Protocolos basados en bloqueos
- Protocolo de bloqueo de dos fases
- Protocolos basados en marcas de tiempo
- Protocolos basados en validación
Protocolos basados en bloqueos
Protocolos basados en bloqueo En los DBMS, es un mecanismo en el que una transacción no puede leer ni escribir datos hasta que adquiere un bloqueo adecuado. Los protocolos basados en bloqueos ayudan a eliminar el problema de concurrencia en los DBMS para transacciones simultáneas al bloquear o aislar una transacción particular para un solo usuario.
Un bloqueo es una variable de datos que está asociada a un elemento de datos. Este bloqueo significa que se pueden realizar operaciones en el elemento de datos. Los bloqueos en DBMS ayudan a sincronizar el acceso a los elementos de la base de datos mediante transacciones concurrentes.
Todas las solicitudes de bloqueo se realizan al administrador de control de concurrencia. Las transacciones continúan solo una vez que se concede la solicitud de bloqueo.
Cerraduras binarias: Un bloqueo binario en un elemento de datos puede estar bloqueado o desbloqueado.
Compartido/exclusivo: Este tipo de mecanismo de bloqueo separa los bloqueos en un DBMS en función de sus usos. Si se adquiere un bloqueo en un elemento de datos para realizar una operación de escritura, se denomina bloqueo exclusivo.
1. Bloqueo compartido (S):
Un bloqueo compartido también se denomina bloqueo de solo lectura. Con el bloqueo compartido, el elemento de datos se puede compartir entre transacciones. Esto se debe a que nunca tendrá permiso para actualizar los datos del elemento de datos.
Por ejemplo, considere un caso en el que dos transacciones leen el saldo de la cuenta de una persona. El base de datos les permitirá leer colocando un candado compartido. Sin embargo, si otra transacción quiere actualizar el saldo de esa cuenta, el bloqueo compartido lo impide hasta que finalice el proceso de lectura.
2. Candado Exclusivo (X):
Con el bloqueo exclusivo, se puede leer y escribir un elemento de datos. Este bloqueo es exclusivo y no se puede mantener simultáneamente en el mismo elemento de datos. El bloqueo X se solicita mediante la instrucción lock-x. Las transacciones pueden desbloquear el elemento de datos después de finalizar la operación de "escritura".
Por ejemplo, cuando una transacción necesita actualizar el saldo de la cuenta de una persona, puede permitir esta transacción colocando un bloqueo X en ella. Por lo tanto, cuando la segunda transacción desea leer o escribir, el bloqueo exclusivo impide esta operación.
3. Protocolo de bloqueo simplista
Este tipo de protocolos basados en bloqueos permite que las transacciones obtengan un bloqueo en cada objeto antes de comenzar la operación. Las transacciones pueden desbloquear el elemento de datos después de finalizar la operación de "escritura".
4. Bloqueo previo al reclamo
El protocolo de pre-reclamación de bloqueo ayuda a evaluar operaciones y crear una lista de elementos de datos necesarios para iniciar un proceso de ejecución. En la situación en la que se otorgan todos los bloqueos, la transacción se ejecuta. Después de eso, todos los bloqueos se liberan cuando finalizan todas sus operaciones.
Hambre
El hambre es la situación en la que una transacción necesita esperar un período indefinido para adquirir un bloqueo.
Las siguientes son las razones de la hambruna:
- Cuando el esquema de espera para elementos bloqueados no se gestiona adecuadamente
- En el caso de fuga de recursos
- La misma transacción es seleccionada como víctima repetidamente
Deadlock
Un bloqueo se refiere a una situación específica en la que dos o más procesos esperan que el otro libere un recurso o más de dos procesos esperan el recurso en una cadena circular.
Protocolo de bloqueo de dos fases
Protocolo de bloqueo de dos fases También conocido como protocolo 2PL, es un método de control de concurrencia en DBMS que garantiza la serialización mediante la aplicación de un bloqueo a los datos de transacción que impide que otras transacciones accedan a los mismos datos simultáneamente. El protocolo de bloqueo de dos fases ayuda a eliminar el problema de concurrencia en DBMS.
Este protocolo de bloqueo divide la fase de ejecución de una transacción en tres partes diferentes.
- En la primera fase, cuando la transacción comienza a ejecutarse, requiere permiso para los bloqueos que necesita.
- La segunda parte es donde la transacción obtiene todos los bloqueos. Cuando una transacción libera su primer bloqueo, comienza la tercera fase.
- En esta tercera fase, la transacción no puede exigir ningún nuevo candado. En cambio, sólo libera los bloqueos adquiridos.
El protocolo de bloqueo de dos fases permite que cada transacción realice una solicitud de bloqueo o desbloqueo en dos pasos:
- Fase de crecimiento: En esta fase, la transacción puede obtener bloqueos pero no liberar ningún bloqueo.
- Fase de contracción: En esta fase, una transacción puede liberar bloqueos pero no obtener ningún bloqueo nuevo.
Es cierto que el protocolo 2PL ofrece serialización, pero no garantiza que no se produzcan bloqueos.
En el diagrama anterior, puede ver que los detectores de bloqueos locales y globales buscan bloqueos y los resuelven reanudando las transacciones a sus estados iniciales.
Método de bloqueo estricto de dos fases
El sistema de bloqueo estricto de dos fases es casi similar al 2PL. La única diferencia es que Strict-2PL nunca libera un candado después de usarlo. Mantiene todos los bloqueos hasta el punto de confirmación y los libera de una sola vez cuando finaliza el proceso.
2PL centralizado
En Centralized 2 PL, un único sitio es responsable del proceso de gestión de bloqueos. Tiene un solo administrador de bloqueo para todo el DBMS.
Copia primaria 2PL
Mecanismo 2PL de copia primaria, muchos administradores de bloqueo se distribuyen en diferentes sitios. Después de eso, un administrador de bloqueo particular es responsable de administrar el bloqueo para un conjunto de elementos de datos. Cuando se actualiza la copia primaria, el cambio se propaga a los esclavos.
2PL distribuido
En este tipo de mecanismo de bloqueo de dos fases, los administradores de bloqueo se distribuyen a todos los sitios. Son responsables de gestionar los bloqueos de datos en ese sitio. Si no se replican datos, equivale a una copia primaria 2PL. Los costos de comunicación del 2PL distribuido son bastante más altos que los del 2PL de copia primaria.
Protocolos basados en marcas de tiempo
Protocolo basado en marca de tiempo En DBMS, es un algoritmo que utiliza el tiempo del sistema o el contador lógico como marca de tiempo para serializar la ejecución de transacciones simultáneas. El protocolo basado en marca de tiempo garantiza que todas las operaciones de lectura y escritura conflictivas se ejecuten en un orden de marca de tiempo.
En este método siempre se da prioridad a la transacción más antigua. Utiliza la hora del sistema para determinar la marca de tiempo de la transacción. Este es el protocolo de concurrencia más utilizado.
Los protocolos basados en bloqueos le ayudan a gestionar el orden en que se ejecutarán las transacciones en conflicto. Los protocolos basados en marcas de tiempo gestionan los conflictos tan pronto como se crea una operación.
Ejemplo:
Suppose there are there transactions T1, T2, and T3. T1 has entered the system at time 0010 T2 has entered the system at 0020 T3 has entered the system at 0030 Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.
Ventajas:
- Los horarios son serializables al igual que los protocolos 2PL
- ¡Sin esperas para la transacción, lo que elimina la posibilidad de bloqueos!
Desventajas:
La inanición es posible si la misma transacción se reinicia y se cancela continuamente
Protocolo basado en validación
Protocolo basado en validación En DBMS, también conocida como técnica de control de concurrencia optimista, es un método para evitar la concurrencia en las transacciones. En este protocolo, se actualizan las copias locales de los datos de la transacción en lugar de los datos en sí, lo que resulta en menos interferencia durante la ejecución de la transacción.
El Protocolo basado en Validación se realiza en las siguientes tres fases:
- Fase de lectura
- Fase de Validación
- Fase de escritura
Fase de lectura
En la fase de lectura, los valores de datos de la base de datos se pueden leer mediante una transacción, pero la operación de escritura o las actualizaciones solo se aplican a las copias de datos locales, no a la base de datos real.
Fase de Validación
En la fase de validación, se verifican los datos para garantizar que no haya ninguna violación de la serialización al aplicar las actualizaciones de la transacción a la base de datos.
Fase de escritura
En la Fase de Escritura, las actualizaciones se aplican a la base de datos si la validación es exitosa, en caso contrario; las actualizaciones no se aplican y la transacción se revierte.
Características de un buen protocolo de concurrencia
Un mecanismo DBMS de control de concurrencia ideal tiene los siguientes objetivos:
- Debe ser resistente a fallas del sitio y de comunicación.
- Permite la ejecución paralela de transacciones para lograr la máxima concurrencia.
- Sus mecanismos de almacenamiento y métodos computacionales deben ser modestos para minimizar los gastos generales.
- Debe imponer algunas restricciones a la estructura de las acciones atómicas de las transacciones.
Resum
- El control de concurrencia es el procedimiento en DBMS para gestionar operaciones simultáneas sin conflictos entre sí.
- Las actualizaciones perdidas, las lecturas sucias, las lecturas no repetibles y los problemas de resumen incorrectos son problemas que se enfrentan debido a la falta de control de concurrencia.
- Basado en bloqueo, de dos fases, basado en marca de tiempo y basado en validación son tipos de protocolos de manejo de concurrencia
- El candado puede ser Compartido (S) o Exclusivo (X)
- El protocolo de bloqueo de dos fases, también conocido como protocolo 2PL, requiere que la transacción adquiera un bloqueo después de liberar uno de sus bloqueos. Tiene dos fases: crecimiento y contracción.
- El algoritmo basado en marcas de tiempo utiliza una marca de tiempo para serializar la ejecución de transacciones simultáneas. El protocolo utiliza el Hora del sistema o recuento lógico como una marca de tiempo.