Concurrencia
4.1 Conceptos
No se puede hablar de Concurrencias en Base de datos sin el uso de las
Transacciones. se ejecutan serialmente, una después de la otra, sin ninguna
intercalación. Informalmente, una transacción es la ejecución de ciertas
instrucciones que acceden a una base de datos compartida.
Se llama Transacción a una colección de operaciones que forman una unidad
lógica de trabajo en una BD realizado por una o más sentencias SQL
estrechamente relacionadas.
4.2 Propiedades de las transacciones
Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como
propiedades ACID (atomicidad, coherencia, aislamiento y durabilidad), para ser
calificada como transacción.
Atomicity: significa que el sistema permite operaciones atómicas. Una
operación atómica es aquella que, si está formada por operaciones más
pequeñas, se consideran como un paquete indivisible. Deben ejecutarse todas
correctamente, o en el caso de que alguna de ellas no pueda hacerlo, el efecto
de las que ya se han ejecutado no debe hacerse notar, debe deshacerse, como
si el conjunto de las operaciones no se hubiera realizado.
No obstante, atomicidad y transacción no son sinónimos. Mientras atomicidad es
una propiedad, la transacción es el mecanismo que utilizan los SGBD para
lograr la atomicidad.
Begin Transaction - Programa - End Transaction
Responsable: El método de recuperación, de no completar todas las
operaciones, devuelve la BD a su estado anterior a empezar esa Tx rollback).
Coherencia: Asegura que cualquier transacción llevará a la base de datos de un
estado válido a otro estado válido.
Después de terminar una transacción la Base de datos no viola ninguna de sus
reglas: valores obligatorios, claves únicas, etc.
Responsable: los programadores mediante la definición adecuada de la
integridad referencial: check, triggers, primary key, foreign key,…
Aislamiento: Los efectos de una Tx no son visibles a otros usuarios mientras no
se confirmen.
Una transacción en ejecución no puede revelar sus resultados a otras
transacciones concurrentes antes de finalizar.
Más aun, si varias transacciones, se ejecutan concurrentemente, los resultados
deben ser los mismos que si ellas se hubieran ejecutado secuencialmente. Esto
se conoce como seriabilidad debido a que su resultado es la capacidad de
volver a cargar los datos iniciales y reproducir una serie de transacciones para
finalizar con los datos en el mismo estado en que estaban después de realizar
transacciones originales.
Responsable: el método de concurrencia: mecanismos, reglas, protocolos
Durabilidad: Significa que en el mismo momento en que una operación ha
terminado satisfactoriamente y el sistema informa de ello, sus efectos quedan ya
registrados permanentemente. Si el sistema falla no debe permitir que se pierdan
las operaciones realizadas por Tx ya confirmadas.
Responsable: el método o gestor de recuperación.
4.3 Grados de consistencia
Consistencia es un término más amplio que el de integridad. Podría definirse
como la coherencia entre todos los datos de la base de datos. Cuando se pierde
la integridad también se pierde la consistencia. Pero la consistencia también
puede perderse por razones de funcionamiento.
Una transacción finalizada (confirmada parcialmente) puede no confirmarse
definitivamente (consistencia).
Si se confirma definitivamente el sistema asegura la persistencia de los cambios
que ha efectuado en la base de datos.
Si se anula los cambios que ha efectuado son deshechos.
La ejecución de una transacción debe conducir a un estado de la base de datos
consistente (que cumple todas las restricciones de integridad definidas).
Si se confirma definitivamente el sistema asegura la persistencia de los cambios
que ha efectuado en la base de datos.
Si se anula los cambios que ha efectuado son deshechos.
Una transacción que termina con éxito se dice que está comprometida
(commited), una transacción que haya sido comprometida llevará a la base de
datos a un nuevo estado consistente que debe permanecer incluso si hay un fallo
en el sistema. En cualquier momento una transacción sólo puede estar en uno
de los siguientes estados.
Activa (Active): el estado inicial; la transacción permanece en este estado
durante su ejecución.
Parcialmente comprometida (Uncommited): Después de ejecutarse la última
transacción.
Fallida (Failed): tras descubrir que no se puede continuar la ejecución normal.
Abortada (Rolled Back): después de haber retrocedido la transacción y
restablecido la base de datos a su estado anterior al comienzo de la transacción.
Comprometida (Commited): tras completarse con éxito.
Aspectos relacionados al procesamiento de transacciones
Los siguientes son los aspectos más importantes relacionados con el
procesamiento de transacciones:
Modelo de estructura de transacciones. Es importante considerar si las
transacciones son planas o pueden estar anidadas.
Consistencia de la base de datos interna. Los algoritmos de control de datos
semántico tienen que satisfacer siempre las restricciones de integridad cuando
una transacción pretende hacer un commit.
Protocolos de confiabilidad. En transacciones distribuidas es necesario introducir
medios de comunicación entre los diferentes nodos de una red para garantizar
la atomicidad y durabilidad de las transacciones. Así también, se requieren
protocolos para la recuperación local y para efectuar los compromisos (commit)
globales.
Algoritmos de control de concurrencia. Los algoritmos de control de concurrencia
deben sincronizar la ejecución de transacciones concurrentes bajo el criterio de
correctitud. La consistencia entre transacciones se garantiza mediante el
aislamiento de las mismas.
Protocolos de control de réplicas. El control de réplicas se refiere a cómo
garantizar la consistencia mutua de datos replicados. Por ejemplo se puede
seguir la estrategia read-one-write-all (ROWA).
4.4 Niveles de aislamiento
Las transacciones especifican un nivel de aislamiento que define el grado en que
se debe aislar una transacción de las modificaciones de recursos o datos
realizadas por otras transacciones. Los niveles de aislamiento se describen en
cuanto a los efectos secundarios de la simultaneidad que se permiten, como las
lecturas desfasadas o ficticias.
Control de los niveles de aislamiento de transacción:
Controla si se realizan bloqueos cuando se leen los datos y qué tipos de
bloqueos se solicitan.