Transacciones

Anuncio
Bases de Datos
Andrea Rodrı́guez
Transacciones
M. Andrea Rodrı́guez-Tastets
Universidad de Concepción,Chile
www.inf.udec.cl\ ∼andrea
[email protected]
II Semestre - 2014
Bases de Datos
Andrea Rodrı́guez
Objetivos de la Unidad
Entender el concepto de transacciones.
Bases de Datos
Andrea Rodrı́guez
Transacciones
I
Una transacción es una unidad lógica de procesamiento de la
base de datos que incluye una o más operaciones de acceso a
la base de datos
I
Se distinguien transacciones solo de lectura a la base de
datos o transacciones de actualización, es decir, leer, cambiar
y escribir un elementos a la base de datos.
I
Las transacciones pueden delimitarse con sentencias
explı́citas begin transaction and end transaction
Bases de Datos
Andrea Rodrı́guez
Transacciones (cont.)
I
Asumimos que una base de datos es modelada en forma
simplificada como una colección de elementos de datos con
nombre (registro, bloque en disco, páginas..)
I
Las operaciones básicas son: Leer elemento(X) y
Escribir elemento(X)
Bases de Datos
Andrea Rodrı́guez
Transacciones (cont.)
Leer elemento(X):
I
Encontrar la dirección del bloque de disco que contiene el
elemento X.
I
Copiar ese bloque de disco en un almacenamiento intermedio
(buffer) dentro de la memoria principal (si es que ese bloque
no está ya en algún buffer de la memoria principal).
I
Copiar el elemento X del almacenamiento intermedio en la
variable de programa X.
Bases de Datos
Andrea Rodrı́guez
Transacciones (cont.)
Escribir elemento(X):
I
Encontrar la dirección del bloque de disco que contiene el
elemento X.
I
Copiar ese bloque de disco en un almacenamiento intermedio
(buffer) dentro de la memoria principal (si es que ese bloque
no está ya en algún buffer de la memoria principal).
I
Copiar el elemento X desde la variable del programa X en el
lugar correcto dentro del búfer.
I
Almacenar el bloque actualizado desde el búfer al disco.
Bases de Datos
Andrea Rodrı́guez
Concurrencia
I
En sistemas multiusuario, es necesario un mecanismo para
controlar la concurrencia. Se pueden producir inconsistencias
importantes derivadas del acceso concurrente (3 problemas).
I
Las transacciones de los usuarios se podrı́an ejecutar de
manera concurrente y podrı́an acceder y actualizar los
mismos elementos de la BD.
Bases de Datos
Andrea Rodrı́guez
Control de concurrencia
I
Problemas: (i) actualización perdida, (ii) actualización
temporal (lectura sucia) and (iii) resumen incorrecto (iv)
lectura no repetible (v) fantasmas.
I
Ejemplo: Sistema de BD de reservas en una lı́nea área.
Transacción T1: transfiere N reservas de un vuelo, cuyo
número de asientos reservados está almacenado en el
elemento de la BD llamado X, a otro vuelo, cuyo número de
asientos reservados está almacenado en el elemento de la BD
llamado Y. Transacción T2: agrega un número de asientos al
vuelo con asientos reservados guardados en elemento X.
Bases de Datos
Actualización perdida
Andrea Rodrı́guez
I
Esto ocurre cuando las transacciones que tienen acceso a los
mismos elementos de la BD tienen sus operaciones
intercaladas de modo que hacen incorrecto el valor de algún
elemento.
I
T1 y T2 se introducen al mismo tiempo y sus operaciones se
intercalan.
T1
R(X)
X=X-N
T2
R(X)
X=X+N
W(X)
R(Y)
W(X)
Y=Y+N
W(Y)
Bases de Datos
Andrea Rodrı́guez
Actualización perdida (cont.)
I
El valor final del elemento X es incorrecto, porque T2 lee el
valor de X ANTES de que T1 lo modifique en la BD, con lo
que se pierde el valor actualizado que resulta de T1.
I
Si X=80 al principio, N=5 (T1 transfiere 5 reservas de
asientos del vuelo que corresponde a X al vuelo que
corresponde a Y) y M=4 (T2 reserva 4 asientos en X), el
resultado final debera ser X=79, pero es X=84, porque la
actualizacin de T1 que eliminó 5 asientos de X se ha perdido.
Bases de Datos
Andrea Rodrı́guez
Actualización temporal
I
Esto ocurre cuando una transacción actualiza un elemento de
la BD y luego la transacción falla por alguna razón. Otra
transacción tiene acceso al elemento actualizado antes de
que se restaure a su valor original.
I
T1 actualiza el elemento X y después falla antes de
completarse, ası́ que el sistema debe cambiar X otra vez a su
valor original.
I
Antes de que pueda hacerlo, la transacción T2 lee el valor
“temporal” de X, que no se grabará permanentemente en la
BD debido al fallo de T1.
I
El valor que T2 lee de X se llama dato sucio, porque fue
creado por una transacción que no se ha completado ni
confirmado todavı́ a.
Bases de Datos
Andrea Rodrı́guez
Actualización temporal (cont.)
T1
R(X)
X=X-N
W(X)
T2
R(X)
X=X+N
W(X)
R(Y)
T1 falla y debe restaurar X a su antiguo valor, mientras tanto T2
ha leı́do el valor temporal incorrecto de X.
Resumen incorrecto
Si una transacción está calculando una función agregada de
resumen sobre varios registros mientras otras transacciones están
actualizando algunos de ellos, puede ser que la función agregada
calcule algunos valores antes de que se actualicen y otros después
de actualizarse.
T1
T2
Sum = 0
R(A)
Sum = Sum+A
R(X)
X = X-N
W(X)
R(X)
Sum= Sum+X
R(Y)
Sum = Sum+Y
R(Y)
Y=Y+N
W(Y)
T2 lee X después de restarle N a X y lee Y antes de sumárle N,
ası́ que el resultado es un resumen incorrecto (discrepancia de N)
Bases de Datos
Andrea Rodrı́guez
Bases de Datos
Andrea Rodrı́guez
Lectura no repetible
T1
R(X)
T2
R(X)
W(X)
R(X)
Fantasmas: una lectura de una tupla que no existı́a antes.
Muchas más problemas...
Bases de Datos
Andrea Rodrı́guez
Manejador de Transacciones
Siempre que se introduce una transacción a un SGBD para
ejecutarla, el sistema tiene que asegurarse de que:
I
Todas las operaciones de la transacción se realicen con éxito
y su efecto quede registrado permanentemente en la BD.
I
Que la transacción no tenga efecto alguno sobre la BD ni
sobre otra transacción, si es que no se completa o falla.
Bases de Datos
Tipos de Fallas
I
Caı́da del Sistema: durante la ejecución de la transacción se
produce un error de hardware, software o red.
I
Error de transacción o del sistema: alguna operación de la
transacción puede hacer que ésta falle (overflow) o errores de
lógica.
I
Errores locales o condiciones de excepción, por ejemplo saldo
insuficiente. Esta podrı́a programarse y no ser un tipo de
fallo.
I
Imposición de control de concurrencia: puede suceder que
método de control de concurrencia aborte una transacción o
deadlock (varias transacciones pelean por el mismo recurso).
I
Fallo del disco
I
Catástrofes
Andrea Rodrı́guez
Bases de Datos
Andrea Rodrı́guez
Estado de transacciones
Una transacción es una unidad atómica de trabajo que se realiza
por completo o bien no se efectúa en absoluto
Read/Write
Begin
End
Parcialmente
confirmada
Activa
Abort
Fallida
Commit
Confirmada
Abort
Terminada
Bases de Datos
Estado de transacciones (cont.)
Andrea Rodrı́guez
I
El componente del sistema encargado de lograr la atomicidad
se conoce como administrador de transacciones y las
operaciones COMMIT (comprometer) y ROLLBACK
(retroceder) son la clave de su funcionamiento.
I
La operación COMMIT señala el término exitoso de la
transacción: le dice al administrador de transacciones que se
ha finalizado con éxito una unidad lógica de trabajo, que la
base de datos está o deberı́a estar de nuevo en un estado
consistente y que se pueden comprometer, o hacer
permanentes todas las modificaciones efectuadas por esa
unidad de trabajo.
I
La operación ROLLBACK, en cambio, señala el término no
exitoso de la transacción: le dice al administrador de
transacciones que algo salió mal, que la base de datos podrı́a
estar en un estado inconsistente y que todas las
modificaciones efectuadas hasta el momento por la unidad
lógica de trabajo deben retroceder o anularse.
Bases de Datos
Andrea Rodrı́guez
Caracterı́sticas de las transacciones
I
Atomicidad, en el sentido que hemos especificado
anteriormente: se ejecutan todas las sentencias o ninguna.
I
Preservación de la consistencia: la ejecución de una
transacción deja la BD en un estado consistente.
I
Aislamiento, ya que una transacción no muestra los cambios
que produce hasta que finaliza.
I
Persistencia, ya que una vez que finaliza la transacción con
éxito, sus efectos perduran en la BD.
I
Seriabilidad, en el sentido de que el efecto de ejecutar
transacciones concurrentemente debe ser el mismo que se
producirı́a al ejecutarlas por separado en un orden secuencial
según van entrando en el sistema.
Planes
Bases de Datos
Andrea Rodrı́guez
I
Un plan/planificación P de n transacciones Ti , es la
descripción del orden en que se ejecutan las operaciones de
dichas Ti , manteniendo, para cada Ti , el orden original de
sus operaciones.
I
Un plan secuencial (o en serie) de un conjunto de T es aquel
en el que todas las operaciones de cada Ti se ejecutan en
secuencia sin que se intercale ninguna operación de otra Tj .
I
Todos los planes secuenciales son correctos porque
garantizan las propiedades de una transacción.
I
Los planes secuenciales pueden ser ineficientes: conviene
intercalar operaciones siempre que mantengan las
propiedades de las transacciones.
I
Un plan equivalente: aquel que produce los mismos efectos
en la BD.
I
Plan secuenciable o serializable: aquel que es equivalente a
otro secuencial (también es correcto)
Bases de Datos
Andrea Rodrı́guez
Planes (cont.)
Dos operaciones de un plan están en conflicto si:
I
Pertenecen a distintas transacciones.
I
Tienen acceso al mismo elemento X.
I
Al menos una de las operaciones es W(X).
I
Para el P1 , R1 (X ) y W2 (X ) están en conflicto.
Bases de Datos
Andrea Rodrı́guez
Equivalencia por conflictos
Dos planes P1 y P2 son equivalentes por conflictos si, para todo
par de operaciones en conflicto, ambas operaciones se ejecutan en
el mismo orden en P1 y P2. Si dos operaciones (de dos Ts) no
están en conflicto dentro de un plan, se pueden cambiar de orden.
Esto permite conseguir planes equivalentes más eficientes
(intercalando todo lo posible). Un plan P es secuenciable en
cuanto a conflictos si se puede encontrar un plan secuencial P que
sea equivalente por conflictos al P.
Bases de Datos
Andrea Rodrı́guez
Equivalencia por vista
Dos planes P y P’ son equivalentes por vista si ambos tienen las
mismas Ts y en los dos se cumplen las siguientes condiciones para
los mismos valores, operaciones y transacciones:
I
Si el valor leı́do por cada Ri (X ) de Ti cumple que fue
producido por Wj (X ), o X era el valor inicial del plan P,
entones se ha de cumplir lo mismo en P’ (asegurando que
ambos leen los mismos valores).
I
La operacin Wk (Y ) es la última que escribe Y en el plan P
también lo es en P (asegura que ambos Ps dejan el mismo
estado final en la BD).
Un plan P es secuenciable en cuanto a vistas si se puede encontrar
un plan secuencial P que sea equivalente por vistas al P.
Bases de Datos
Andrea Rodrı́guez
Ejemplo Plan en Serie (Plan A)
T1
R(X)
X=X-N
W(X)
R(Y)
Y = Y+N
W(Y)
T2
R(X)
X=X+M
W(X)
Bases de Datos
Andrea Rodrı́guez
Ejemplo Plan NO en Serie (Plan B)
T1
R(X)
X=X-N
W(X)
T2
R(X)
X=X+M
W(X)
R(Y)
Y = Y+N
W(Y)
Bases de Datos
Andrea Rodrı́guez
Equivalencia de planes
I
El plan B es equivalente por conflicto al plan A. El plan B es
serializable.
I
Para probar si un plan es serializable por conflictos se usa un
grafo de precedencia o grafo de serialización, que es un grafo
dirigido G = (N, A), con N = {T1 , T2 , . . . , T : n} y
A = {a1 , a2 , . . . , an } arcos. Cada arco ai tiene la forma
(Tj → Tk ), con j, k = 1, n, donde Tj es el nodo inicial de ai
y Tk es el nodo final. El arco se crea si una de las
operaciones de Tj aparece en el plan antes que alguna
operación en conflicto de Tk .
Bases de Datos
Andrea Rodrı́guez
Equivalencia de planes (cont.)
I
Para cada transacción Ti que participa en el plan, crear un
nodo etiquetado Ti en el grafo.
I
Para cada paso en P en el que Tj ejecuta una orden R(X )
después de que Ti ejecute una orden W (X ), crear un arco
(Ti → Tj ) en el grafo.
I
Para cada paso en P en que Tj ejecuta una operació W (X )
después de que Ti ejecute R(X ), crear un arco (Ti → Tj ) en
el grafo.
I
Para cada paso en P en que Tj ejecuta W (X ) después de
que Ti ejecute W (X ), crear un arco (Ti → Tj ) en el grafo.
I
El Plan P es serializable si y solo si el grafo no tiene ciclos.
Bases de Datos
Andrea Rodrı́guez
Grafo de precedencia (ejemplo)
Asuma el siguiente plan con dos transacciones:
P : R1 (X )R2 (X )W1 (X )R1 (Y )W2 (X )W1 (Y ).
El grafo de precedencia es entonces:
T1
X
T2
X
Ya que existe un ciclo, el plan no es serializable.
Ejercicio: Considere el siguiente plan:
P = R2 (Z )R2 (Y )W2 (Y )R3 (Y )R3 (Z )R1 (X )W1 (X )
W3 (Y )W2 (Z )R2 (X )R1 (Y )W1 (Y )W2 (X )
Bases de Datos
Andrea Rodrı́guez
Archivo de log
Para conseguir anular y recuperar transacciones, el método más
usado consiste en utilizar un archivo de diario o log en el que va
guardando toda la información necesaria para deshacer (en caso de
fracasar) o rehacer ( en caso de recuperar) las transacciones. Este
archivo consta de:
I
identificador de la transacción
I
hora de modificación
I
identificador del registro afectado
I
tipo de acción
I
valor anterior del registro
I
nuevo valor del registro
I
información adicional
Bases de Datos
Andrea Rodrı́guez
Puntos de revisión (check points)
Un concepto relacionado con los archivos de log es el
CHECKPOINT, que permite manejar en forma eficiente el
contenido de los archivos log, ya que permiten no tener que
recorrer todo el archivo de log, ante fallas. El establecimiento de
puntos de revisión implica:
I
Grabar fı́sicamente el contenido de los búfers de datos a la
base de datos fı́sica.
I
Grabar fı́sicamente un registro de punto de revisión especial
dentro del archivo de log o bitácora.
Los puntos marcados como checkpoint, permiten la recuperación
de la base de datos en caliente, es decir, después de la caı́da del
sistema se obtiene la dirección del registro de recuperación más
reciente y se recorre el archivo de log desde el punto marcado
como checkpoint
Bases de Datos
Andrea Rodrı́guez
Puntos de revisión (cont)
t1
t2
t3
t4
t5
check point
caída del sistema
La transacción t1 no se ve afectada por la falla del sistema, ni por
el proceso de recuperación, por haberse completado antes del
último punto de recuperación. Las transacciones t2 y t4, a pesar
de haber terminado no han sido grabadas en la base de datos, ya
que éstas serı́an comprometidas en un checkpoint. Las
transacciones t3 y t5 deberán rehacerse ya que no han concluido.
Bases de Datos
Andrea Rodrı́guez
Transacciones en SQL
I
La definición de transacción en SQL es una unidad lógica de
trabajo que garantiza ser atómica.
I
No tiene un sentencia de iniciación explı́cita, pero si terminan
con COMMIT o ROLLBACK
I
Las caracterı́stica de las transacciones en SQL se definen con
la sentencia SET TRANSACTION, la que especifica modo de
acceso, tamaño del área de diagnóstico y nivel de aislamiento.
Bases de Datos
Andrea Rodrı́guez
Transacciones en SQL: modo de acceso
Puede especificar un READ ONLY o READ WRITE. Un modo
READ WRITE permite que se ejecuten operaciones de insertar,
modificar, crear o borrar. En cambio un modo READ ONLY solo
sirve para leer.
Bases de Datos
Andrea Rodrı́guez
Transacciones en SQL: área de diagnóstico
DIAGNOSTICS SIZE n, especifica un valor entero que indica el
número de condiciones que se pueden tomar simultáneamente en
el área de diagnóstico. Estas condiciones suministan información al
usuario de errores o excepciones de sentencias SQL ejecutadas más
recientemente.
Bases de Datos
Andrea Rodrı́guez
Transacciones en SQL: nivel de aislamiento
ISOLATION LEVEL <aislamiento>, donde aislamiento puede
tomar los sgtes valores:
I
READ UNCOMMITED (lectura no confirmada)
I
READ COMMITED (lectura confirmada)
I
REPEATABLE READ (lectura repetible)
I
SERIALIZABLE
Bases de Datos
Transacciones en SQL: nivel de aislamiento (cont.)
Si se usa algo menos restrictivo que serializable, pueden ocurrir
una de las siguientes violaciones:
I
Lectura sucia: Ocurre cuando una transacción usa los valores
actualizados por otra transacción aún no confirmada y que
aborta.
I
Lectura no repetible: Una trasacción T1 puede leer un valor
de una tabla. Si una trasacción T2 actualiza luego ese valor y
T1 vuelve a leer el valor, T1 verá un valor diferente.
I
Fantasmas: Una transacción T1 puede leer un conjunto de
tuplas, quizás dependiendo de la condición WHERE de una
consulta. Si una transacción T2 inserta una nueva tupla que
también satisface la condición del WHERE usada en T1,
entonces cuando T 1 se repita verá una tupla que no existı́a
previamente.
Andrea Rodrı́guez
Bases de Datos
Andrea Rodrı́guez
Transacciones en SQL: violaciones posibles
Nivel de aislamiento
Lectura no confirmada
Lectura confirmada
Lectura repetible
Serializable
Lectura sucia
Si
No
No
No
Lectura repetible
Si
Si
No
No
Fantasmas
Si
Si
Si
No
Bases de Datos
Andrea Rodrı́guez
Ejemplo SQL
EXEC SQL WHENEVER SQLERROR GOTO UNDO;
EXEC SQL SET TRANSACTION
READ WRITE
DIAGNOSTICS SIZE 5
ISOLATION LEVEL SERIALIZABLE;
EXEC INSERT...;
EXEC UPDATE...;
EXEC COMMIT;
GOTO: THE END;
UNDO: EXEC SQL ROLLBACK;
THE END:...;
Descargar