Вы находитесь на странице: 1из 7

Apuntes de Bases de Datos Luis A.

Zarza López, UTM, 2018

Transacciones y Control de Concurrencia (capítulo 15 del


libro)
Básicamente, una transacción es una colección de operaciones que forman una unidad de trabajo. Se
busca que se ejecuten todas las operaciones del conjunto pero asegurando que si hay algún fallo en al
menos una operación, se cancelen todas las operaciones y no quede registrado ningún cambio.

Definiciones
Las transacciones se efectúan iniciando las operaciones con el comando de SQL begin transaction, a
continuación se aplican los comandos que serán considerados como parte de la unidad, y cerrando con
el comando commit transaction. Lo normal es efectuar dichos comandos desde SQL integrado en
algún lenguaje de programación, para detectar errores, y en cuyo caso aplicar el comando rollback
transaction.

Propiedades ACID
La integridad de los datos necesita que se tengan las siguientes propiedades en las transacciones:
• Atomicidad. O se efectúan todas las operaciones adecuadamente, o no se realiza ninguna.
• Consistencia. La ejecución aislada de la transacción (sin otra transacción concurrente) conserva
la consistencia de la base de datos.
• Aislamiento. Aunque se ejecuten varias transacciones concurrentemente, el sistema garantiza
que para cada par de transacciones Ti y Tj, se cumple que para los efectos de Ti, o bien Tj ha
terminado antes de que comience Ti, o bien Tj ha comenzado su ejecución después de que Ti
termine. De esta manera, cada transacción ignora el resto.
• Durabilidad. Tras la finalización con éxito de una transacción, los cambios realizados en la
base de datos permanecen, aún con fallos del sistema.
Estas propiedades son conocidas como propiedades ACID, por las siglas de las propiedades en inglés.

Implementación del aislamiento


Una implementación altamente ineficiente de la atomicidad y durabilidad consiste en que, al momento
de iniciar la transacción, se realice una copia “respaldo” de toda la base de datos, de manera que si las
actualizaciones tuvieron éxito, se elimina la copia. Si hubo algún error, el respaldo se convierte en la
base de datos y se elimina la que fue alterada. Es importante que se maneje un “puntero” que apunte a
la base de datos “actual”, y en caso de reemplazo, el cambio en el puntero ocurra tan rápido como sea

Transacciones y Control de Concurrencia (capítulo 15 del libro) 1


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

posible. Existen técnicas más eficientes para asegurar la atomicidad y durabilidad.

Ejecuciones concurrentes
Una forma de evitar complicaciones de integridad con las transacciones sería evitar su ejecución
concurrente, pero en bases de datos grandes con muchos usuarios sería un problema serio serializar las
transacciones. La concurrencia permitiría:
• Productividad y mejor aprovechamiento de recursos. Puesto que las operaciones sobre BD
implica accesos a disco, con tiempos de espera mucho mayores a accesos a memoria, el
procesador podría ocupar el tiempo de dicha espera en otras operaciones.
• Tiempo de espera reducido.

Planes de ejecución
Para organizar la ejecución de transacciones concurrentes se pueden definir planes de ejecución, es
decir, el orden en que se ejecutarán las partes de las transacciones. Algunos planes de ejecución podrían
producir inconsistencias y otros no.
Es fácil comprobar que la concurrencia puede causar serias inconsistencias. A continuación se muestran
dos transacciones concurrentes y la secuencia de sus pasos:

leer(A)

A := A-50

leer(A)

temp := A*0.1

A := A – temp

escribir(A)

leer(B)

escribir(A)

leer(B)

B := B + 50

escribir(B)

Transacciones y Control de Concurrencia (capítulo 15 del libro) 2


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

B := B + temp

escribir(B)

Serialidad
En las transacciones previamente descritas, se tienen operaciones de lectura-escritura, y se tienen
operaciones aritméticas. Es fácil comprender que si se deja fija la secuencia de operaciones de lectura-
escritura (con respecto a la concurrencia) y se reacomodan las operaciones aritméticas, el resultado no
cambia. Por ello, las operaciones de lectura-escritura son las que deben serializarse cuidadosamente.
Por supuesto, las operaciones aritméticas deben mantener el mismo orden, pero no importa su
serialidad en cuanto a la concurrencia.
Hay dos formas de equivalencia de planificación: secuencialidad en cuanto a conflictos, y
secuencialidad en cuanto a vistas.

Secuencialidad en cuanto a conflictos


Suponga una planificación P en la que hay dos instrucciones consecutivas Ii e Ij pertenecientes a las
transacciones Ti y Tj. Si se refieren a diferentes elementos de datos (como por ejemplo, a diferentes
registros), se puede intercambiar su orden sin afectar el resultado. Pero si se refieren al mismo elemento
Q, entonces el orden puede afectar el resultado. Se deben considerar 4 casos:
1. Ii = leer(Q), Ij = leer(Q). El orden no importa pues leerán el mismo dato.
2. Ii = leer(Q), Ij = escribir(Q). Si Ii ocurre antes, no leerá el dato escrito por Ij. El orden es
importante.
3. Ii = escribir(Q), Ij = leer(Q). Semejante al anterior.
4. Ii = escribir(Q), Ij = escribir(Q). La última operación de escritura es la que prevalecerá, pues
sobreescribirá lo escrito por la primera operación.
Se dice que Ii e Ij están en conflicto si existen operaciones de diferentes transacciones sobre el mismo
elemento de datos, y al menos una de esas instrucciones es una operación escribir.
Sean Ii e Ij instrucciones consecutivas de una planeación P. Si Ii e Ij son instrucciones de transacciones
diferentes y además Ii e Ij no están en conflicto, entonces se pueden cambiar el orden de Ii e Ij para
obtener una nueva planificación P’. Lo esperado es que P sea equivalente a P’, ya que todas las
instrucciones aparecen en el mismo orden en ambas planificaciones, salvo Ii e Ij cuyo orden no es
importante.

Transacciones y Control de Concurrencia (capítulo 15 del libro) 3


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

leer(A)

escribir(A)

leer(A)

escribir(A)

leer(B)

escribir(B)

leer(B)

escribir(B)
Puesto que escribir(A) de T2 no está en conflicto con leer(B) de T1, se pueden intercambiar para
generar una planificación equivalente.

leer(A)

escribir(A)

leer(A)

leer(B)

escribir(A)

escribir(B)

leer(B)

escribir(B)

Si una planificación P se puede transformar en otra P’ por medio de intercambios de instrucciones no


conflictivas, se dice que P y P’ son equivalentes en cuanto a conflictos.
Se dice que una planificación P es secuenciable en cuanto a conflictos si es equivalente en cuanto a
conflictos a una planificación secuencial.

Secuencialidad en cuanto a vistas


Esta secuencialidad es menos rigurosa, y también se basa únicamente en operaciones de leer y escribir.

Transacciones y Control de Concurrencia (capítulo 15 del libro) 4


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

Considere dos planificaciones P y P’, en las cuales participa el mismo conjunto de transacciones. Se
dice que dos planificaciones P y P’ son equivalentes en cuanto a vistas si cumplen las tres
condiciones:
1. Para todo elemento de datos Q, si la transacción T1 lee el valor inicial de Q en la planificación
P, entonces Ti debe leer también el valor inicial de Q en la planificación P’.
2. Para todo elemento de datos Q, si la transacción Ti ejecuta leer(Q) en la planificación P y el
valor lo ha producido la transacción Tj (si existe dicha transacción) entonces, en la planificación
P’, la transacción Ti debe leer también el valor de Q que haya producido la transacción Tj.
3. Para todo elemento de datos Q, la transacción (si existe) que realice la última operación
escribir(Q) en la planeación P, debe realizar la última operación escribir(Q) en la planificación
P’.
Las condiciones 1 y 2 aseguran que cada transacción lee los mismos valores en ambas planificaciones y
por tanto, realizan los mismos cálculos. La condición 3, junto con 1 y 2, asegura que ambas
planificaciones dan como resultado el mismo estado final del sistema.

Bloqueo
Una manera de asegurar la secuencialidad de las transacciones es bloquear el acceso a los elementos de
datos mientras una transacción tiene acceso. Hay dos modos de acceso a un elemento de datos:
1. Compartido. Si una transacción Ti obtiene un bloqueo en modo compartido (C) sobre el
elemento Q, entonces Ti puede leer Q pero no lo puede escribir.
2. Exclusivo. Si una transacción Ti obtiene un bloqueo de modo exclusivo (X) sobre el elemento
Q, entonces Ti puede tanto leer como escribir Q.
A continuación se puede observar una secuencia de bloqueos y desbloqueos:

T1 T2 Control de concurrencia

bloquear-X(B)

Conceder-X(B,T1)

leer(B)

B := B – 50

escribir(B)

Transacciones y Control de Concurrencia (capítulo 15 del libro) 5


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

desbloquear(B)

bloquear-C(A)

conceder-C(A,T2)

leer(A)

desbloquear(A)

bloquear-C(B)

conceder-C(B,T2)

leer(B)

desbloquear(B)

visualizar( A + B )

bloquear-X(A)

conceder-X(A,T1)

leer(A)

A := A + 50

escribir( A )

desbloquear(A)

Concesión de bloqueos
Puede ocurrir que un elemento Q tenga un bloqueo compartido por T2, mientras que T1 solicita un
bloqueo exclusivo, el cual no será concedido mientras T2 lo tenga. Si T3 solicita Q en modo
compartido, se le podrá conceder. Si sucesivamente más transacciones solicitan Q en modo compartido,
les será concedido, pero impedirán que T1 obtenga el bloqueo exclusivo que solicita por lo que no
progresará. Se dice que tiene inanición.
Se puede evitar la inanición de la siguiente manera: Cuando una transacción Ti solicita un bloqueo
sobre Q en el modo M, el gestor de control de concurrencia lo concede siempre que:
1. No exista otra transacción que posea bloqueo sobre Q que esté en conflicto con M

Transacciones y Control de Concurrencia (capítulo 15 del libro) 6


Apuntes de Bases de Datos Luis A. Zarza López, UTM, 2018

2. No exista otra transacción que esté esperando un bloqueo sobre Q y que lo haya solicitado antes
que Ti.

Bloqueo en dos fases


Un protocolo que asegura la secuencialidad es el protocolo de bloqueo de dos fases, el cual exige que
cada transacción realice las peticiones de bloqueo y desbloqueo en dos fases:
1. Fase de crecimiento. Una transacción puede obtener bloqueos pero no liberarlos.
2. Fase de decrecimiento. Una transacción puede liberar bloqueos pero no puede obtener ninguno
nuevo.
Se pueden modificar las planificaciones para acomodar los desbloqueos de manera que mejore a
secuencialidad, sin alterar la transacción.

Transacciones y Control de Concurrencia (capítulo 15 del libro) 7