Concurrencia

Anuncio
Concurrencia
Índice
? Control de concurrencia basado en la técnica de reserva
Concurrencia
?
Protocolo de dos fases
?
El planificador. ¿Cómo usa los locks?
?
Granularidad múltiple
? Control de Concurrencia basado en la marca de tiempo
? Control de Concurrencia basado en la técnica de validación
? Niveles de aislamiento en SQL2 (ORACLE)
© O. Díaz, A. Illarramendi UPV/EHU
1
Planificación serializable
Protocolos de concurrencia
?En la práctica es difícil comprobar la
serializabilidad de una planificación.
?Para asegurar que las transacciones se “enreden” de
forma serializable, el SGBD impone unas reglas en
el momento de utilizar los gránulos: el protocolo
?Por ello la estrategia que se sigue en casi
todos los sistemas prácticos es encontrar
métodos que garanticen la serializabilidad
sin tener que verificar las planificaciones.
© O. Díaz, A. Illarramendi UPV/EHU
?Tres protocolos:
?
?
?
3
Control de Concurrencia basado en
la técnica de reserva
?Ya que los conflictos se producen por acceder a los
mismos datos, una forma de asegurar la seriabilidad es
controlar el acceso.
?Reserva (Bloqueo). Cuando una transacción está
accediendo a la BD, una reserva puede denegar el
acceso a otras transacciones con el fin de impedir que
se produzcan resultados incorrectos.
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
2
5
el de reserva, de Bloqueo (locks)
el de la marca de tiempo (time stamping)
el de validación
© O. Díaz, A. Illarramendi UPV/EHU
4
Control de Concurrencia basado en
la técnica de reserva
?
cada gránulo se encuentra en un estado de
reserva (disponible,compartido,exclusivo)
?
protocolo:
? antes
de acceder a un dato, se realiza una petición de
reserva (lock) compartida (si se va a leer) o en
exclusiva (si se va a escribir)
? si la petición no puede ser atendida, la transacción
tendrá que esperar hasta que el gr ánulo se libere
© O. Díaz, A. Illarramendi UPV/EHU
6
1
Concurrencia
Modos mediante los cuales se
pueden bloquear los datos
Protocolo basado en la reserva
?Compartido (Shared). Si una transacción Ti
obtiene un bloqueo en modo compartido
sobre el elemento Q, entonces Ti puede leer
Q pero no lo puede escribir
?Exclusivo. Si una transacción Ti obtiene un
bloqueo en modo exclusivo sobre el
elemento Q entonces Ti puede tanto leer
como escribir Q
© O. Díaz, A. Illarramendi UPV/EHU
?El planificador utiliza una tabla de locks
Peticiones de las Transacciones
7
Utilización de las op. de reserva
?Protocolo:
Una transacción no realizará una petición de
reserva (compartida o exclusiva) para un
elemento X si ya posee una reserva (compartida
o exclusiva) para dicho elemento X. (Esta regla puede
tener excepciones).
Una transacción no realizará una petición de
unlock para X a menos que ya posea una reserva
(compartida o exclusiva) para el elemento X.
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
© O. Díaz, A. Illarramendi UPV/EHU
8
Utilización de las op. de reserva
?Operaciones de reserva sobre los elementos:
? solicitud de reserva compartida (lectura): lock_S(G)
? solicitud de reserva exclusiva (escritura): lock_X(G)
? liberación de la reserva: unlock(G)
?Proceso: matriz de compatibilidad
S- Shared (Compartido) X Exclusive (Exclusivo)
solicitud S solicitud X
estado disp
si
si
estado S
si
no
estado
no
no
9
© O. Díaz, A. Illarramendi
UPV/EHUX
?
Planificación Serializable
?Elementos de la Tabla: para cada gránulo se guarda
el estado en el que se encuentra: disponible,
compartido, exclusivo
Implementación
?
PLANIFICADOR
Tabla
Lock
( v$LOCK)
11
T1
? Protocolo:
?
?
antes de acceder a un dato,
se realiza una petición de
reserva compartida (si se va
a leer) o en exclusiva (si se
va a escribir)
si la petición no puede ser
atendida, la transacción
tendrá que esperar hasta que
el gránulo se libere
? Las op. de reserva las
realiza el planificador
LOCK_X(A)
READ(A,t)
t := t - 50
WRITE(A,t)
LOCK_S(B)
.....
.....
.....
UNLOCK(A)
.....
.....
READ(B,t)
UNLOCK(B)
T2
LOCK_X(A)
READ(A,t)
aux := t * 0,1
t := t - aux
WRITE(A,t)
UNLOCK(A)
LOCK_S(B)
READ(B,t)
UNLOCK(B)
© O. Díaz, A. Illarramendi UPV/EHU
10
Utilización de las op. de reserva
T1
LOCK_X(A)
READ(A,t)
t := t - 50
WRITE(A,t)
UNLOCK(A)
T2
LOCK_X(A)
READ(A,t)
aux := t * 0,1
t := t - aux
WRITE(A,t)
UNLOCK(A)
LOCK_X(B)
READ(B,t)
t := t + aux
WRITE(B,t)
UNLOCK(B)
LOCK(B)
READ(B,t)
t := t + 50
WRITE(B,t)
© O. Díaz,
A. Illarramendi UPV/EHU
UNLOCK(B)
? Se podría pensar en
mejorar la concurrencia,
liberando los gr ánulos lo
antes posible
? Pero... no garantiza la
seriabilidad
? En el ejemplo, T2 ve
?
?
el dato A después de
modificarlo T1
el dato B antes de
modificarlo T1
12
2
Concurrencia
Protocolo de dos fases (2PL)
(Básico)
Protocolo de dos fases (2PL)
(Básico)
? Para garantizar que sea serializable en conflicto se añade una tercera regla:
?
en toda transacción, todas las peticiones de reserva deben preceder a
cualquier petición de liberación (Bloqueo en 2 fases 2PL)
? Puede demostrarse que si toda transacción de una
planificación sigue el protocolo de bloqueo en dos fases,
puede garantizarse que la planificación será serializable en
términos de conflictos (Eswaran et al. 1976)
? Problemas que no resuelve el 2PL:
?
?
? Dentro de la transacción se distinguen dos fases:
? de crecimiento o reserva de datos (durante la cual se puede reservar pero no liberar)
? de encogimiento o liberación de datos (durante la cual se puede liberar perno no reservar)
© O. Díaz, A. Illarramendi UPV/EHU
?
? 2PL NO permite todos los planes seralizables. Puede limitar
la concurrencia.
13
Anulaciones en Cascada (ejemplo)
T2
T1
ROLLBACK
ROLLBACK
© O. Díaz, A. Illarramendi UPV/EHU
15
Protocolo de 2PL. Interbloqueos
Problema (Abrazo mortal). Técnicas para
gestionarlos
T2
LOCK_X(A)
READ(A,t)
t := t - 50
WRITE(A,t)
?Evitar los interbloqueos (deadlocks):
?
LOCK_S(B)
READ(B,t)
LOCK_S(A)
LOCK_X(B)
esperando por A
técnicas de prevención
?Detectar los interbloqueos
?
ABD 2006-2007
Variantes del protocolo de 2
fases.
? 2PL (B2F) Riguroso. Una transacción no libera ninguna de sus reservas
(exclusivas o compartidas) hasta después de confirmarse o abortar.
(evita anulaciones en cascada)
LOCK_S(A)
ROLLBACK
© O. Díaz, A. Illarramendi UPV/EHU
14
? 2PL (B2F) Estricto. Una transacción no libera ninguna de sus reservas
exclusivas antes de confirmarse o abortar. (variante más usada en la
práctica).
LOCK_X(A)
READ(A,t)
t:=t+100
WRITE(A,t)
UNLOCK(A)
esperando por B
© O. Díaz, A. Illarramendi UPV/EHU
? 2PL (B2F) Conservador o estático. Una transacción debe reservar todos
los elementos a los que tendrá acceso antes de comenzar a ejecutarse,
pre-declarando su conjunto de lectura y conjunto de escritura. (no
produce el abrazo mortal) (difícil de usar en la práctica)
T3
LOCK_X(A )
READ(A,t)
LOCK_S(B)
t := t – 50
READ(B,s)
WRITE(A,t)
UNLOCK(A )
T1
Anulaciones en Cascada
El deadlock (abrazo mortal, interbloqueo)
Bloqueo indefinido
© O. Díaz, A. Illarramendi UPV/EHU
Protocolo de 2PL. Interbloqueos
PREVENCIÓN
?Temporizaciones
17
DETECCIÓN
? Técnica
? Técnica:
? Periódicamente, el sistema comprueba
? cada transacción reserva todos
que no se han producido bloqueos
sus datos desde el principio
entre las transacciones
(conservador)
? Mecanismos: grafo de espera,
? la reserva de datos es tratada
“ timeout”
como unidad atómica (si no es posible
? Atractiva si sabemos que va a haber
obtener alguna de las reservas no se reservara
ninguno de ellos)
técnicas de detección
16
poca interferencia entre las
transacciones
? Problemas
? Riesgo de bloqueo. Factores:
? requiere conocer todos los datos
? nº de gránulos utilizados
que se van a utilizar a lo largo
? tamaño del gránulo
de la transacción
? grado de “ compartición” de gránulos
? los datos están reservados
? duración de las transacciones
durante más tiempo
© O. Díaz, A. Illarramendi UPV/EHU
18
3
Concurrencia
Protocolo de 2PL. Interbloqueos
Recuperación cuando se detecta un
interbloqueo
?Temporizaciones:
? Se necesitará abortar una o más transacciones. En algunas
circunstancias, la elección de las transacciones que hay que abortar
puede ser obvia, en otras puede que no sea clara. Interés: abortar
transacciones que supongan el mínimo coste. Consideraciones:
?
?
?
Cuánto tiempo lleva ejecutándose la transacción (menor)
Cuántos elementos de datos han sido actualizados por la transacción
(pocos)
Cuántos elementos de datos debe todavía actualizar la transacción
(muchos)
© O. Díaz, A. Illarramendi UPV/EHU
19
Protocolo de 2PL. Problema
Espera Indefinida
?
21
Protocolo 2PL. Técnica del
upgrading (promocionar)
? Un patrón frecuente es
primero leer un gránulo
para más tarde
modificarlo...
T1
LOCK_S(A1)
LOCK_S(A2)
LOCK_S(A3)
LOCK_S(An)
READ(A1,t1)
READ(A2,t2)
? En estos casos, para reducir
el tiempo en el que el
gránulo está reservado en
exclusiva, se reserva
primero en S, y sólo cuando
se va a escribir se solicita la
reserva en X
sólo durante este intervalo
reservadoUPV/EHU
en X
© O.está
Díaz,A1
A. Illarramendi
ABD 2006-2007
20
LOCK_X(A1)
LOCK_S(A2)
LOCK_S(A3)
LOCK_S(An)
READ(A1,t1)
READ(A2,t2)
?Mientras tanto, T2 tiene
que esperar
READ(A3,t3)
.......
?A veces se reserva antes de
necesitarlo.
READ(An,tn)
WRITE(A1,t1)
UNLOCK(A1)
UNLOCK(A2)
UNLOCK(A3)
..
UNLOCK(An)
T2
LOCK_S(A1)
READ(A1,t)
© O. Díaz, A. Illarramendi UPV/EHU
22
Técnica del upgrading. Problema
T2
•La promoción puede tener lugar sólo en la fase de crecimiento.
•Si T es la única transacción con reserva de lectura S para A en el
momento en que emite la operación de reserva X para A, es posible
promocionar el bloqueo, de lo contrario la transacción debe esperar.
•Con la técnica del upgrading se pueden producir un tipo adicional de
inter-bloqueo
LOCK_S(A1)
READ(A1,t1)
LOCK_S(A2)
READ(A2,t2)
UNLOCK(A1)
UNLOCK(A2)
T1
LOCK_S(A)
READ(A,t1)
READ(An,tn)
LOCK_X(A1)
WRITE(A1)
UNLOCK(A1)
..
UNLOCK(An)
© O. Díaz, A. Illarramendi UPV/EHU
?A1 no se puede liberar
hasta que se haya reservado
el último gránulo
uso de una cola del tipo “el que llega primero tiene
prioridad”.
Almacenar el número de veces que una transacción ha
sido seleccionada como víctima y fijar un límite superior
© O. Díaz, A. Illarramendi UPV/EHU
Una transacción que solicite un bloqueo esperará
únicamente durante un periodo de tiempo
definido por el sistema. Si no se concede el
bloqueo dentro de ese periodo, se aborta y
reinicia la transacción.
Protocolo 2PL. Limita la
concurrenciaT1
?Una transacción no puede continuar durante un
periodo indeterminado mientras que otras
transacciones continúan con normalidad
?Posibles soluciones
?
Protocolo de 2PL. Interbloqueos
T2
LOCK_S(A)
READ(A,t1)
LOCK_X(A)
LOCK_X(A)
permite que T2 se ejecute
concurrentemente con T1
23
© O. Díaz, A. Illarramendi UPV/EHU
24
4
Concurrencia
Solución: update locks
•Update lock: LOCK_U(G)
•permite sólo leer
•únicamente el LOCK U(G) puede promocionar
después. La reserva S no puede promocionar.
T1
LOCK_S(A)
READ(A,t1)
Solución: update locks
T2
LOCK_U(A)
READ(A,t1)
LOCK_X(A)
LOCK_X(A)
WRITE(A)
......
• Para evitar inter-bloqueos, sólo una
transacción puede tener este privilegio:
matriz de compatibilidad asimétrica
estado S
estado X
estado U
solicitud
S
si
solicitud
X
no
solicitud
U
no
no
no
no
no
no
si
T1
LOCK_U(A)
READ(A,t1)
T2
LOCK_S(A)
LOCK_X(A)
así T1 puede
promocionar a X
© O. Díaz, A. Illarramendi UPV/EHU
25
Protocolo de 2PL. incremental
locks
?Interesante en algunas situaciones.
?“Muchas” transacciones operan en la BD
únicamente incrementando y disminuyendo valores
almacenados.
?La propiedad interesante de estas acciones
(incremento y disminución) es que conmutan entre
si (ya que las dos transacciones añaden constantes
al mismo elemento de la BD) pero no con las
operaciones de lectura y escritura.
© O. Díaz, A. Illarramendi UPV/EHU
27
Protocolo de 2PL. incremental
locks
?INC
?
entra en conflicto con otras lecturas o escrituras
es conmutativa con otras INC
?matriz
solicitud solicitud
de compatibilidad
S
X
estado S
si
no
estado X
no
no
estado INC
no
no
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
© O. Díaz, A. Illarramendi UPV/EHU
26
Protocolo de 2PL. incremental
locks
?INC(A,cte,t) = {READ(A,t); t := t + cte;
WRITE(A,t)} Operación con ejecución atómica.
? Ejemplos de transacciones (transacciones de cargo y abono)
? transferencia entre dos cuentas corrientes
? venta de billetes que disminuye el número de plazas disponibles
INCT1(A,2,t)
INCT2(A,10,t)
A=7
A=5
A = 17
INCT2(A,10,t)
INCT(A,c,t) significa:
READ(A,t), t:=t+c,
A = 15
©
O.
Díaz,
A.
Illarramendi
UPV/EHU
WRITE(A,t)
INCT1(A,2,t)
28
El planificador. ¿Cómo usa los
locks?
•el planificador es el responsable
de las reservas y liberaciones
•(las transacciones NO)
? Puede producir planes correctos que no sean serializables
?
?Se puede dar LOCKU en (A) cuando existan
reservas de tipo S sobre A pero una vez que exista
un LOCKU sobre A no podemos dar ningún otro
tipo de reserva sobre A (de lo contrario podría no
promocionar nunca)
la transacción
READ(A,t) + ¿ se leerá A?
planificador I
tabla de
reservas
solicitud
INC
no
no
si
LOCK_S(A); READ(A,t)
planificador II
29
•los gránulos son liberados
cuando el gestor de transacciones
indica que la transacción ha
o ha sido
confirmada
©abortado
O. Díaz, A. Illarramendi
UPV/EHU
READ(A,t)
buffers
30
5
Concurrencia
El planificador. Tabla de
reserva
Tabla de reserva
Para aquellos gránulos que están siendo reservados, se guarda:
• Group mode: reserva más fuerte de las realizadas sobre G por una transacción.
• Waiting?: indica si hay al menos una transacción esperando por G
• List: lista de transacciones que tienen o esperan una reserva sobre G
Id. Gránulo
Group mode
Waiting?
List
G1
S
no
List1
G2
U
YES
List2
G3
S
no
List3
LIST es una lista de registros con los siguientes campos
. Nombre de la Transacci ón
• Mode: tipo de reserva
• Wait ?: indica si la transacci ón tiene o espera hacer una reserva
• Tnext: enlace a la siguiente reserva sobre G hecha por esta transacción
• Next: enlace entre reservas
T1 | S | no | |
T1 | U| no | |
31
procedure realizar_acción(A: acción, G:gránulo, T: transacción)
case A do
write, read:
hacer A sobre la BD
lock
:
consultar tablaDeReserva(G);
if lock sobre G posible
then realizar el lock
else poner en espera T;
actualizar tablaDeReserva(A,G,T)
commit,abort:
liberar los gránulos de T
actualizar tablaDeReserva(A,G,T)
if trans. esperando por gránulos liberados
then reanudar estas transacciones
32
? Ante la liberación de un gránulo G, ¿a cuál de las transacciones en
espera se le asigna G?
? FIFO. Asignar G a la transacción que más tiempo lleve esperando.
Se evita así que una transacción este en una espera continua (efecto
inanición)
Recordar que antes de write/read se realiza el “lock” correspondiente
© O. Díaz, A. Illarramendi UPV/EHU
© O. Díaz, A. Illarramendi UPV/EHU
Planificador. Política de liberaciones
El planificador. Algoritmo
33
Granularidad múltiple
?
Priorizar a las transaccions que quieren leer. Se conceden todas
las peticiones S, y una petición U. Se posponen las peticiones X.
Se puede producir la muerte por inanición
?
Priorizar a las transacciones que quieren promocionar (upgrade)
© O. Díaz, A. Illarramendi UPV/EHU
34
Granularidad múltiple. Niveles
? El tamaño de la unidad de reserva (gránulo) afecta a:
? la concurrencia (inversamente)
? la eficiencia del mecanismo de concurrencia (inversamente)
Tabla
? ¿Cuál es el mejor tamaño del gránulo? Depende de los tipos de transacciones
implicadas.
? Cada transacción puede tener unas necesidades diferentes dependiendo del:
? nº de datos a los que necesite acceder
? duración de la transacción
propagación
del
bloqueo
(implícito)
Bloq1
tupla1
? La granularidad múltiple permite definir distintos niveles de granularidad: tabla,
bloque, tupla
ABD 2006-2007
?Tamaño proporcional al número de
elementos del lock (NO al tama ño de la BD)
T2 | X | yes| |
© O. Díaz, A. Illarramendi UPV/EHU
© O. Díaz, A. Illarramendi UPV/EHU
?Posible implementación como una tabla hash
35
tupla2
Bloq2
Bloq3
tupla3
Cuando una transacción bloquea un nodo, también bloquea todos
los descendientes de ese nodo con el mismo modo de bloqueo.
© O. Díaz, A. Illarramendi UPV/EHU
36
6
Concurrencia
Granularidad múltiple. Ejemplo
Granularidad múltiple
T1: (nivel tabla)
?Supongamos que:
{...... % casi todos los alumnos > 10
UPDATE Alumno
SET nota = nota +1
WHERE edad > 10 .........}
T1:X
?
Alumno
T2: (nivel tupla)
{.......% pocos alumnos son de Berrobi
SELECT *
FROM Alumno
WHERE ciudad=“ Berrobi”....}
juan
?
ana edurnelorena
T2:S
© O. Díaz, A. Illarramendi UPV/EHU
37
Granularidad múltiple
?
39
Bloqueos de intención
ABD 2006-2007
solicitud
IX
si
si
no
no
solicitud
S
si
no
si
no
solicitud
X
no
no
no
no
© O. Díaz, A. Illarramendi UPV/EHU
40
Protocolo de Reservas
?1. Hacer la reserva sobre el nodo raíz.
?2. Un nodo se puede reservar por la
transacción T en modo S o IS sólo si el nodo
padre está reservado en modo IS.
?3. Un nodo se puede reservar por la
transacción T en modo X o IX sólo si el nodo
padre está reservado en modo IX.
?IS: permite leer en nodos inferiores. Implica que
se esta haciendo bloqueo explicito S en un nivel
inferior (o se pedirá).
?IX: permite escribir en nodos inferiores. Implica
que se esta haciendo bloqueo X(y en S) en un nivel
inferior (o se pedirá).
solicitud
IS
estado IS
si
estado IX
si
estado S
si
estado
X
no
© O. Díaz,
A. Illarramendi
UPV/EHU
38
?La solución a la gestión de locks con niveles
diferentes implica el manejo de un nuevo tipo de
locks denominados “warnings” descritos con una I(Intención) inicial.
?Reserva de bloqueo intencional
?Idea: Una transacción indique, a lo largo del camino
desde la raíz hasta el nodo deseado, que tipo de
bloqueo requerirá de uno de los descendientes del
nodo.
Se concede la reserva a T2
Después al considerar la solicitud de T1, el
SGBD debe verificar todas las tuplas para ver si
hay conflicto de reservas. Poco eficiente.
© O. Díaz, A. Illarramendi UPV/EHU
© O. Díaz, A. Illarramendi UPV/EHU
Granularidad múltiple
?¿Qué ocurre si T2 solicita antes que T1?
?
1. T1 solicita y obtiene una reserva exclusiva para la
tabla. Todas las tuplas se reservan de modo exclusivo
(beneficio para T1)
2. T2 solicita una reserva compartida en la tupla “Juan”.
EL SGBD debe verificar la compatibilidad de la reserva
solicitada con las reservas existentes (recorrer el árbol
hacia la raíz). Si aparece un conflicto en cualquier
momento, la reserva no se concede.
41
© O. Díaz, A. Illarramendi UPV/EHU
42
7
Concurrencia
Modo SIX
Bloqueos de intención
?SIX (S+IX): es el “group mode” correspondiente a
un S e IX hechos por la misma transacción
{....
select numCue into :top from CuentaCorriente
where saldo = (select MAX(saldo) from CuentaCorriente)
solicitud solicitud
IS
IX
estado IS
si
si
estado IX
si
si
estado S
si
no
estado SIX
si
no
estado X
no
no
update CuentaCorriente set saldo = saldo + 10000
numCueGroup
= :top
Id.where
Gránulo
mode
cuentaCorriente
SIX
....}
tupla Top
X
Waiting?
no
no
List
List1
List2
T - S - no
T - IX - no
T - X - no
© O. Díaz, A. Illarramendi UPV/EHU
43
?
la transacción NO se ve obligada a reservar más datos de
los necesarios por trabajar con un gránulo grande
?
el número de reservas/liberaciones es menor ya que el
gránulo se ajusta al volumen de datos manejados por la
transacción
© O. Díaz, A. Illarramendi UPV/EHU
?Los SGBD también soportan otro tipo de bloqueos,
denominado cerrojo, que se mantiene durante un
periodo de tiempo mucho más corto que un bloqueo
normal.
?Los cerrojos se usan antes de leer o escribir una
página en disco, con el fin de garantizar que la
operación sea atómica.
?Los cerrojos no necesitan adaptarse al protocolo
normal de control de concurrencia.
ABD 2006-2007
1) transacciones cortas que acceden sólo a unos
pocos elementos
2)transacciones largas que acceden a ficheros
completos
© O. Díaz, A. Illarramendi UPV/EHU
46
Control de Concurrencia basado en la
marca de tiempo
Cerrojos
© O. Díaz, A. Illarramendi UPV/EHU
?Esta técnica resulta adecuada a la hora de
procesar una combinación de transacciones
que incluyen:
?
45
44
Granularidad múltiple. Ventajas
?
?Mejora la eficiencia del mecanismo de reserva
solicitud
X
no
no
no
no
no
?El modo SIX no se solicita. Es un agregado de
S+IX para comodidad del planificador
© O. Díaz, A. Illarramendi UPV/EHU
Granularidad múltiple. Ventajas
?Intensifica la concurrencia
solicitud
S
si
no
si
no
no
47
?Técnica optimista
?
arregla el problema cuando se produce. La técnica de
bloqueo es pesimista, previene el problema
?Cada transacción tiene asociada una marca de tiempo
(mt) (timestamp) asignada por el sistema al empezar
su ejecución (no tiene que ser necesariamente de tipo
time)
?Si T2 llega al sistema después de T1, mt(T1) <
mt(T2). Las mt se asignan en orden ascendente.
© O. Díaz, A. Illarramendi UPV/EHU
48
8
Concurrencia
Implementación
Diferencia respecto a las
Técnicas de Locking
? Elementos. Cada gránulo G tiene asociado dos marcas de tiempo, obtenidas
de la mayor mt.(transacción más reciente) entre todas las transacciones que:
? hayan leído G: marca READ_MT(G)
? hayan escrito G: marca WRITE_MT(G)
? Operaciones
? Las mt. son gestionadas internamente por el sistema
? Proceso
? Al acceder un trans. T a un gránulo G, se compara la mt de T con la de G
para comprobar que la planificación en serie equivalente no es violada
? Si este orden es violado, se hace rollback de T
? T nunca espera, por tanto T nunca se queda bloqueado
? Si T aborta, también deberá abortarse cualquier transacción que pueda
haber usado un valor escrito por T (y así en cascada)
?T. Marca de tiempo:
?
?
cuando algo va mal aborta la transacción
Ordenan la ejecución de las transacciones según un plan
en serie equivalente
?T. Locking:
?
?
no abortan, retrasan.
Las planificaciones serializables producidas tienen sus
planes equivalentes basados en el orden en que las
transacciones en ejecución reservan los elementos que
requieren
© O. Díaz, A. Illarramendi UPV/EHU
49
© O. Díaz, A. Illarramendi UPV/EHU
Implementación
Marcas de Tiempo (básico)
planif. en serie
T1,T2,T3,T4
? Definición: planificación en serie que resulta de ordenar las
transacciones según su marca de tiempo
? mt(T1) < mt(T2) < mt(T3) ?
planif. en serie: {T1,T2, T3}
? Este orden serial puede violarse si se adelanta alguna trans. con m.t.
mayor,
1ª transacción T1
2ª transacción T2
Granulo A
planificador
•READ_MT:
•WRITE_MT
3ª transacción T3
4ª transacción T4
© O. Díaz, A. Illarramendi UPV/EHU
51
? Proceso:
cuando T
si antes otra transacción
quiere ...
con m.t. mayor ha ...
READ(G)
READ(G)
WRITE(G)
READ(G)
READ(G)
WRITE(G)
WRITE(G)
WRITE(G)
T2
READ(A,t)
READ(A,t)
t := t - 50
WRITE(A,t)
READ(B,u)
READ(B,u)
1ª planif. en serie
T1,T2,T3,T4
?esta planificación es
serializable
ABD 2006-2007
READ_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
52
2ª planif. en serie
T1,--,T3,T4, T62
Abortar T2.
La antigua T2 se vuelve a enviar,
y al entrar en el sistema se la bautiza como T62.
?es detectada por el
protocolo de marca de
tiempo
T2
© O. Díaz, A. Illarramendi UPV/EHU
¿cómo se detecta?
¿Qué ocurre al abortar una trans.?
display(t + u)
u := u + 50
WRITE(B,u)
entonces
pasa ...
continuar
abortar
abortar
abortar
© O. Díaz, A. Illarramendi UPV/EHU
Ejemplo
T1
50
T62
?NO es detectada por el
protocolo de reserva
53
© O. Díaz, A. Illarramendi UPV/EHU
54
9
Concurrencia
Control de Concurrencia
basado en la marca de tiempo
básico
Control de Concurrencia
basado en la marca de tiempo
estricto
?Genera planificaciones serializables en conflicto.
?No permite todos los posibles planes serializables
?No tiene lugar el abrazo mortal
?Puede producirse la espera indefinida (una
transacción se aborta y reinicia continuamente)
?Asegura:
?
?
Para ello una transacción que solicita una lectura o
escritura se detiene hasta que una transacción
anterior que escribió el valor haga COMMIT o
ROLLBACK
(Interesante para situaciones donde la mayoría de las
transacciones son de lectura)
© O. Díaz, A. Illarramendi UPV/EHU
55
Control de Concurrencia
basado en la marca de tiempo.
Regla de Thomas
si antes otra transacción
con m.t. mayor ha ...
READ(G)
READ(G)
WRITE(G)
WRITE(G)
entonces
pasa ...
continuar
abortar
abortar
READ_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
© O. Díaz, A. Illarramendi UPV/EHU
57
Marca de tiempo multiversión
MT(T2)=
200
MT(T3)
=175
MT(T4)
=225
A. versión O
A.versión 150
read.MT = 150
read.MT = 200
write.MT = 150
READ(A)
READ(A)
ABD 2006-2007
entonces
pasa ...
continuar
abortar
abortar
ignorar
¿cómo se detecta?
READ_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
WRITE_MT(G) > MT(T)
© O. Díaz, A. Illarramendi UPV/EHU
58
A.versión 200
read.MT = 225
write.MT = 200
© O. Díaz, A. Illarramendi UPV/EHU
si antes otra transacción
con m.t. mayor ha ...
READ(G)
READ(G)
WRITE(G)
WRITE(G)
Marca de tiempo multiversión
READ(A)
WRITE(A)
READ(A)
WRITE(A)
cuando T
quiere ...
READ(G)
WRITE(G)
READ(G)
WRITE(G)
? Como otra transacción más joven se ha adelantado, T lee una
versión de G anterior, con un WRITE_MT mas pequeño
* the Thomas write rule
MT(T1)
=150
56
?Idea: mantener versiones antiguas de los gránulos
?Cada operación escribir crea una nueva versión
?Objetivo: evitar la siguiente situación:
¿cómo se detecta?
ignorar la escritura
y continuar
© O. Díaz, A. Illarramendi UPV/EHU
Marca de tiempo multiversión
(variante)
? No asegura planificaciones serializables en conflicto pero
rechaza menos operaciones de tipo write.
cuando T
quiere ...
READ(G)
WRITE(G)
READ(G)
WRITE(G) *
Planificaciones serializables en conflicto
Con recuperación frente a rollbacks en cascada
59
? Si T escribe G,
? se comprueba que no haya habido otra transacción con MT mayor que haya leído
G (viendo el READ_MT de la versión anterior). (2º conflicto). Si no es posible:
rollback
? se crea una nueva versión de G con WRITE_MT(G) y READ_MT(G) la marca de
tiempo de T
? Si T lee G,
? se busca una versión tal que
? WRITE_MT(G) ? MT(T)
? no existe otra versión G’ tal que WRITE_MT(G) < WRITE_MT(G’) ? MT(T)
? se asigna a READ_MT (G) el valor más alto entre MT(T) y el READ_MT de
la versión actual
? Se destruye una versión de G cuando ya no queda ninguna transacción con MT menor
60
que
el Díaz,
WRITE_MT(G)
© O.
A. Illarramendi UPV/EHU
10
Concurrencia
Diferencia respecto a la técnica
de marca de tiempo clásica
Comparación de métodos
Todas las
planificaciones
?T. Multiversión: mantiene un registro sobre lo que
hacen las transacciones activas. Requiere más
espacio de almacenamiento para mantener múltiples
versiones de los elementos de la Base de Datos.
SV
SC
MT
2PL
?T. Marca de tiempo clásica: mantiene por cada
gránulo las marcas de tiempo de los READ y
WRITE
© O. Díaz, A. Illarramendi UPV/EHU
61
© O. Díaz, A. Illarramendi UPV/EHU
Control de Concurrencia
basado en la técnica de
validación
Control de Concurrencia
basado en la técnica de
validación
? Otro tipo de t écnica de control de concurrencia optimista
? No se efectúa verificación alguna durante la ejecuci ón de las transacciones
? La transacción se ejecuta en tres fases:
? de lectura: sólo se lee valores correctos (con COMMIT) (escritura en variables locales)
? de validaci ón, cuando se comprueba la seriabilidad
? de escritura, cuando se escriben los datos en el buffer global, supuesto T ha pasado
la validaci ón (en caso contrario la transacción se aborta y se reinicia posteriormente)
lectura
validación
62
escritura
?Técnica adecuada si:
?
?
Hay poca interferencia entre las transacciones,
casi todas se validaran sin dificultad
Sin embargo, si hay mucha interferencia, se
desecharan los resultados de muchas
transacciones que se ejecutaran hasta su término
y estas tendrán que reiniciarse posteriormente.
buffer global
© O. Díaz, A. Illarramendi UPV/EHU
63
? Elementos: No están asociados a los gránulos sino a las T:
? READ_SET(T), cjto. de gránulos leídos por T
? WRITE_SET(T), cjto. de gránulos escritos por T
? START(T), momento comienzo fase de lectura
? VAL(T), momento comienzo fase de validación
? END(T), momento finaliza la fase de escritura
?
?
? Se utiliza un enfoque similar a la técnica de marca de
tiempo, pero aquí ...
? ... la marca de tiempo de una transacción es el momento de
su validación. Por tanto...
? ... la planificación en serie equivalente es la que resulta de
ordenar las transacciones en función del comienzo de la fase
de validación
START, transacciones que han comenzado pero no
completado la validación.
VAL, transacciones validadas en fase de escritura
END, transac. que ya han concluido la fase de escritura
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
64
Implementación. Proceso de
validación
Implementación
?
© O. Díaz, A. Illarramendi UPV/EHU
? Suponemos que la fase de escritura es instantánea
65
© O. Díaz, A. Illarramendi UPV/EHU
66
11
Concurrencia
Implementación. Proceso de
validación
Comparación
Una trans. T pasa con éxito la fase de validación, si para cualquier
otra trans. U anterior a la planificación en serie:
? caso 1:
?
U ? END
?
?
T
end(U) < start(T)
cond: true
?
? caso 2:
?
U ? VAL
?
?
start(T) < end(U) < val(T)
cond: RS(T) ? WS(U) = ?
cond: (RS(T) ? WS(T)) ? WS(U) = ?
se guarda el “ estado” para
cada gránulo
? Marca de tiempo
?
T
?
? caso 3:
?
U ? STAR
?
val(U) < val(T)
?
Almacenamiento
? Reserva:
MT por cada gránulo
MT por cada transacción
? Validación
?
T
?
MT por cada transacción
RS, WS por cada trans.
Eficiencia
? Reserva
?
evita rollbacks” incluso con un
alto solapamiento entre
transacciones
? Marca de tiempo, Validación
?
eficientes si trans de sólo lectura
o con poco solapamiento
? Validación
?
detecta la no-seriabilidad más
tarde que las otras técnicas
Se verifica, caso 1, caso 2, caso 3
© O. Díaz, A. Illarramendi UPV/EHU
67
Soporte de transacciones en
SQL
© O. Díaz, A. Illarramendi UPV/EHU
68
Soporte de transacciones en
SQL
?La definición de una transacción SQL es similar al
concepto de transacción ya definido. Es decir, es
una unidad lógica de trabajo y se garantiza que es
atómica.
?A toda transacción se le atribuyen ciertas
características que se especifican con la sentencia
SET TRANSACTION de SQL2. Entre las características
están el modo de acceso y el .
?Con SQL no hay una sentencia explícita
begin_transaction. Sin embargo, toda transacción ha de
tener una sentencia explícita al final (COMMIT o
ROLLBACK)m
© O. Díaz, A. Illarramendi UPV/EHU
69
?Modo de acceso: puede especificarse como READ
ONLY (solo lectura), o READ WRITE (leer y escribir).
Valor por defecto READ WRITE.
© O. Díaz, A. Illarramendi UPV/EHU
70
Soporte de transacciones en
SQL
Niveles de aislamiento en SQL2
Principio ACID
?Una transacción no muestra los cambios que
produce hasta que finaliza (Isolation) Gestor de
Control de Concurrencia
? El nivel de aislamiento especifica el comportamiento de los “locks” en una transacció n. A
menor nivel de aislamiento menor la duració n de las reservas.
? Nivel de aislamiento: representa cómo un SGBD mantiene la integridad
de los datos contra los problemas de lecturas sucias, lecturas fantasmas
y lecturas irrepetibles, las cuales pueden ocurrir debido a transacciones
concurrentes. Se especifica utilizando la sentencia ISOLATION LEVEL
<aislamiento> donde el valor para aislamiento puede ser:
? READ UNCOMMITED
? READ COMMITED
? REPETEABLE READ
? SERIALIZABLE
(por defecto Serializable)
El uso del término SERIALIZABLE se basa en no permitir
violaciones que causen lecturas sucias, lecturas no repetibles ni
fantasmas.(diferente de la noción de seriabilidad vista anteriormente)
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
71
© O. Díaz, A. Illarramendi UPV/EHU
72
12
Concurrencia
El problema de los “dirty reads
(lecturas sucias)”
Lectura Sucia
? Un dato se dice “sucio” si ha sido
escrito por una transacción que
todavía no ha sido confirmada.
T1
T2
LOCK_X(A)
READ(A,t)
t := t - 50
WRITE(A,t)
LOCK_S(B)
UNLOCK(A)
? Una transacción T2 “depende” de
una T1, si T2 lee datos “sucios”
escritos por T1. Si T1 falla, T2
habrá leído un valor incorrecto.
LOCK_X(A)
READ(A,t)
aux := t * 0,1
t := t - aux
WRITE(A,t)
UNLOCK(A)
? “cascading rollback”. Cuando una trans. T1 aborta, todas
aquellas otras trans. que hubieran leído datos “ensuciados” por
T1 (por ejemplo T2), también se ven obligadas a abortar.
? Este es un proceso en “cascada” ya que las trans. depedientes de
T2 se ven a su vez obligadas a abortar. Y así sucesivamente
start_T1
write(A )
error
read(A)
write(B)
start_T2
read(B)
ABORT
© O. Díaz, A. Illarramendi UPV/EHU
start_T3
73
? “Problema de lecturas fantasma (phantom reads)”. Una
trans. A realiza un select con una condición C. Luego, otra
transacción modifica o introduce nuevas tuplas que
satisfacen la condición C. La trans. A vuelve a realizar el
mismo select, y ve estas nuevas tuplas “fantasmas”
75
- aislamiento +
+ concurrencia -
Niveles de aislamiento en
SQL2
© O. Díaz, A. Illarramendi UPV/EHU
76
Niveles de aislamiento en SQL
? “ serializable”. La trans. se ejecuta como si fuera instant ánea: sólo ve UN
estado confirmado de la BD
? “repeatable read”.(lectura repetible) La trans. sólo puede leer datos
confirmados, y si se leé dos veces el mismo dato (una tabla) las tuplas leídas
inicialmente tienen que seguir ahí
? “read committed” (lectura confirmada). La trans. sólo puede leer datos
confirmados, pero cada dato puede estar en un estado diferente.
Nivel de
aislamiento
Dirty-reads
Non-repeatable
reads
Phantom reads
Serializable
No
No
No
Repeatable read
No
No
Sí
Read committed
No
Sí
Sí
Read
uncommitted
Sí
Sí
Sí
SI: significa que el nivel de aislamiento no previene el problema
NO: significa que el nivel de aislamiento previene el problema
? “read uncommitted ” (lectura no confirmada . Se pueden leer datos no
confirmados. (ej. Apl. de procesamiento estadístico)
ABD 2006-2007
74
Fantasmas
?Una transacción T1 puede leer un determinado
valor de una tabla. Si otra transacción T2 actualiza
más tarde dicho valor y T1 lee de nuevo el valor,
T1 verá un valor diferente.
© O. Díaz, A. Illarramendi UPV/EHU
commit
© O. Díaz, A. Illarramendi UPV/EHU
Lecturas no repetibles
© O. Díaz, A. Illarramendi UPV/EHU
commit
READ(B,t)
77
© O. Díaz, A. Illarramendi UPV/EHU
78
13
Concurrencia
Definición de transacciones
Bibliografía
? Inicio:
SET TRANSACTION <modo de acceso>, ISOLATION LEVEL <nivel aislamiento>
<modo de acceso> ::= READ WRITE| READ ONLY
<nivel aislamiento> ::= READ UNCOMMITTED | READ COMMITTED |
REPEATABLE READ | SERIALIZABLE
READ ONLY indica que la trans. sólo contiene SELECTs (sin “ for update”)
READ WRITE indica que la trans. puede contener cualquier instrucción del LMD
? Final:
COMMIT
ROLLBACK
© O. Díaz, A. Illarramendi UPV/EHU
ABD 2006-2007
79
?
Database System Implementation
H. García Molina, J.D. Ullman, J. Widom
Prentice Hall 2000
?
Fundamentals of Database Systems (4. edición 2004) Fundamentos de
Sistemas de Bases de Datos (3. Edición 2002).
R.A. Elmasri, S. B. Navathe . Addison Wesley
?
Sistemas de Bases de Datos. Un enfoque pr áctico para diseño,
implementación y gestión. (4. edición, 2005)
T. Connolly, C. Begg Addison- Wesley
© O. Díaz, A. Illarramendi UPV/EHU
80
14
Descargar