SlideShare una empresa de Scribd logo
1 de 76
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 1
05/03/2022
Concurrencia
Unidad 9
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Bases de datos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 2
05/03/2022
Control de la concurrencia
Objetivos
▪ Conocer la problemática asociada a la
concurrencia de transacciones en los sistemas de
bases de datos
▪ Entender el significado de la serializabilidad y su
aplicación al control de la concurrencia
▪ Comprender algunas técnicas para el control de la
concurrencia empleadas por los sistemas gestores
de bases de datos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 3
05/03/2022
Control de la concurrencia
Bibliografía
▪ [CB 2005] Connolly, T.; Begg C.: Sistemas de bases
de datos. 4ª Edición. Pearson Educación. Addison
Wesley. (Cap. 20)
▪ [EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos
de Sistemas de Bases de Datos. 3ª Edición. Addison-
Wesley. (Cap. 19 y 20)
▪ [EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de
bases de datos. Conceptos fundamentales. 2ª
Edición. Addison-Wesley Iberoamericana. (Cap. 17 y
18)
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 4
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 5
05/03/2022
▪ Los sistemas de bases de datos, según el número de
usuarios que pueden utilizarlos de forma concurrente,
se clasifican en sistemas monousuario y
multiusuario
▪ Varios usuarios pueden usar un mismo equipo a la vez
gracias a la multiprogramación: el computador
puede procesar al mismo tiempo varias transacciones
• Si el equipo tiene varias CPU, es posible el procesamiento
simultáneo (paralelo) de transacciones
• Si sólo hay una CPU, el SO de multiprogramación
reparte el tiempo de CPU entre las transacciones:
ejecución concurrente intercalada
 modelo que supondremos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 6
05/03/2022
▪ Varias transacciones introducidas por usuarios, que
se ejecutan de manera concurrente, pueden
leer/modificar los mismos elementos almacenados
en la base de datos
▪ Razones para permitir la concurrencia:
• Aumentar la productividad: número de transacciones
ejecutadas por minuto.
• Aumentar la utilización de la CPU (menos tiempo ociosa) y
Control del disco.
• Reducir el tiempo medio de respuesta de transacciones
(las ‘pequeñas’ no esperan a las ‘grandes’).
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 7
05/03/2022
▪ ... porque pueden surgir problemas si las transacciones
concurrentes se ejecutan de manera no controlada
▪ Ejemplo sencillo:
sistema de bases de datos que permite hacer y anular
reservas de plazas en vuelos de diferentes compañías
aéreas.
• Se almacena un registro por cada vuelo, que incluye, entre
otras cosas, el número de asientos reservados en el vuelo
• Sean dos transacciones T1 y T2 concurrentes:
• T1 transfiere N reservas realizadas en un vuelo X a otro vuelo Y
• T2 reserva M plazas en el vuelo X
¿Por qué es necesario el control de la concurrencia?
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 8
05/03/2022
Problemas potenciales provocados por la concurrencia
Transacción T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
Transacción T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
• Aunque las transacciones pueden ser perfectamente
correctas en sí mismas, la ejecución concurrente de T1 y T2
puede producir un resultado incorrecto, debido a la
intercalación de sus operaciones, poniendo en cuestión
la integridad y la coherencia de la base de datos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 9
05/03/2022
▪ La actualización perdida
• T1 y T2 que acceden a los mismos datos, tienen sus
operaciones intercaladas de modo que hacen incorrecto
el valor de algún dato
Problemas potenciales provocados por la concurrencia
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
El elemento X tiene un valor
incorrecto porque su
actualización por T1 se
‘perdió’ (se sobreescribió)
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 10
05/03/2022
▪ La actualización temporal (o lectura sucia/Dirty Read)
• T1 actualiza un elemento X de la BD y luego falla, pero antes de
que se restaure el valor original de X, T2 tiene acceso al «valor
temporal» de X
Problemas potenciales provocados por la concurrencia
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
…
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
T1 falla y debe devolver a X su
antiguo valor; pero mientras, T2
ha leído el valor ‘temporal’
incorrecto de X (dato sucio)
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 11
05/03/2022
▪ La actualización temporal (o lectura sucia/Dirty Read)
• Sucede cuando una segunda transacción lee datos que están
siendo modificados por una transacción antes de que haga
COMMIT.
Problemas potenciales provocados por la concurrencia
Transacción 1 Transacción 2
UPDATE cuentas SET saldo =
saldo - 100 WHERE id = 1;
SELECT saldo FROM cuentas
WHERE id = 1;
ROLLBACK
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 12
05/03/2022
▪ El resumen incorrecto/Lectura fantasma (Phantom Read)
• Otra transacción T3 calcula una función agregada de resumen
sobre varios registros (suma las plazas reservadas para todos los
vuelos), mientras otras transacciones, como T1, actualizan dichos
registros: puede que T3 considere unos registros antes de ser
actualizados y otros después
Problemas potenciales provocados por la concurrencia
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T3
suma:=0;
leer_elemento(A);
suma:= suma+A;
…
…
…
leer_elemento(X);
suma:= suma+X;
leer_elemento(Y);
suma:= suma+Y;
…
…
…
T3 lee X después de
restar N, pero lee Y
antes de sumar N, así
que el resultado es un
resumen incorrecto
(discrepancia de N)
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 13
05/03/2022
▪ El resumen incorrecto/Lectura fantasma (Phantom
Read)
• Este error ocurre cuando una transacción ejecuta dos veces
una consulta que devuelve un conjunto de filas y en la segunda
ejecución de la consulta aparecen nuevas filas en el
conjunto que no existían cuando se inició lo transacción.
Problemas potenciales provocados por la concurrencia
Transacción 1 Transacción 2
SELECT SUM(saldo) FROM
cuentas;
INSERT INTO cuentas
VALUES (4, 3000);
SELECT SUM(saldo) FROM
cuentas;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 14
05/03/2022
▪ La lectura no repetible (Non-Repeatable Read)
• T4 lee un elemento X dos veces y otra transacción, como
T1, modifica dicho X entre las dos lecturas: T4 recibe
diferentes valores para el mismo elemento
Problemas potenciales provocados por la concurrencia
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T4
leer_elemento(X);
…
leer_elemento(X);
…
T4 lee X antes de
restar N
T4 lee X después
de restar N
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 15
05/03/2022
▪ La lectura no repetible (Non-Repeatable Read)
• Se produce cuando una transacción consulta el mismo
dato dos veces durante la ejecución de la transacción y la
segunda vez encuentra que el valor del dato ha sido
modificado por otra transacción.
Problemas potenciales provocados por la concurrencia
Transacción 1 Transacción 2
SELECT saldo FROM cuentas
WHERE id = 1;
UPDATE cuentas SET saldo =
saldo - 100 WHERE id = 1;
SELECT saldo FROM cuentas
WHERE id = 1;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 16
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 17
05/03/2022
▪ Objetivo de un protocolo de control de concurrencia:
• Planificar las transacciones de forma que no ocurran
interferencias entre ellas, y así evitar la aparición de los
problemas mencionados
▪ Solución obvia: no permitir intercalación de operaciones
de varias transacciones
Motivación
Planificación A
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
Planificación B
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 18
05/03/2022
• Pero el objetivo de un SGBD multiusuario también es
maximizar el grado de concurrencia del sistema
• Si se permite la intercalación de operaciones, existen
muchos órdenes posibles de ejecución de las transacciones
Motivación
¿Existe algún modo de identificar las ejecuciones que está garantizado que
protegen la consistencia de la base de datos?
Teoría de la Serializabilidad
Planificación C: actualización perdida!
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
Planificación D: correcta!
T1
leer_elemento(X);
X:= X-N;
escribir_elemento(X);
leer_elemento(Y);
Y:=Y+N;
escribir_elemento(Y);
T2
leer_elemento(X);
X:= X+M;
escribir_elemento(X);
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 19
05/03/2022
• Cada transacción comprende una secuencia de operaciones
que incluyen acciones de lectura y escritura en la BD, que
finaliza con una confirmación (commit) o anulación (rollback)
• Una planificación P de n transacciones concurrentes
T1, T2 ... Tn es una secuencia de las operaciones realizadas
por dichas transacciones, sujeta a la restricción de que
para cada transacción Ti que participa en P,
sus operaciones aparecen en P
en el mismo orden en el que ocurren en Ti
Planificación de transacciones
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 20
05/03/2022
• Para el control de la concurrencia (y recuperación de fallos)
interesa prestar mayor atención a estas operaciones:
• Ejemplos de planificaciones de transacciones
– El subíndice de cada operación indica la transacción que la realiza
PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;
PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ;
PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ;
PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
PE: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; r1 ;
Planificación de transacciones
operación abreviatura
leer_elemento l
escribir_elemento e
commit c
rollback r
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 21
05/03/2022
• Una planificación serie P es aquella en la que las
operaciones de cada transacción se ejecutan
consecutivamente sin que se intercalen operaciones de
otras transacciones
PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;
PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ;
• Toda planificación serie es correcta BD consistente
• Pero no se garantiza que los resultados de todas las
ejecuciones en serie de las mismas transacciones sean
idénticos
– Ejemplo: cálculo del interés de una cuenta bancaria antes o después de realizar
un ingreso considerable
en general, son inaceptables en la práctica (ineficiencia)
Planificación serie
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 22
05/03/2022
• Una planificación no serie P es aquella en la que las
operaciones de un conjunto de transacciones
concurrentes se ejecutan intercaladas
PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ;
PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
• Hemos de determinar qué planificaciones no serie
permiten llevar la BD a un estado al que pueda
llegarse mediante una ejecución en serie
Planificación no serie
Este es el objetivo de la
Serializabilidad
KO
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 23
05/03/2022
• Una planificación P (no serie) es serializable si es
equivalente a alguna planificación serie de las
mismas n transacciones
– Una planificación que no es equivalente a ninguna ejecución en
serie, es una planificación no serializable
• Toda planificación serializable es correcta
– Produce los mismos resultados que alguna ejecución en serie
• Dos maneras de definir la equivalencia entre planificaciones:
– Equivalencia por conflictos
– Equivalencia de vistas
Planificación serializable
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 24
05/03/2022
• Si dos transacciones únicamente leen un determinado
elemento de datos, no entran en conflicto entre sí y el
orden de las operaciones no es importante
• Si hay dos transacciones que leen o escriben elementos
de datos independientes, no entran en conflicto entre sí y
el orden de las operaciones no es importante
• Si una de las transacciones escribe un elemento de datos
y la otra lee o escribe el mismo elemento, entran en
conflicto y el orden de las operaciones sí es
importante
Equivalencia por conflictos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 25
05/03/2022
• En una planificación, 2 operaciones están en conflicto si
– pertenecen a diferentes transacciones,
– tienen acceso al mismo elemento X,
– y al menos una de ellas es escribir_elemento(X)
Operaciones en conflicto en las planificaciones PC y PD:
PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1;
PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
• Dos planes son equivalentes por conflictos si el orden
de cualesquiera dos operaciones en conflicto es el
mismo en ambos planes
Equivalencia por conflictos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 26
05/03/2022
• Una planificación P es serializable por conflictos si
equivale por conflictos a alguna planificación serie S
Podremos intercambiar cada dos operaciones de P consecutivas de
transacciones distintas y sin conflicto, hasta obtener la planificación
serie equivalente
PD : l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ;
PD1: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; c2 ; e1(Y) ; c1 ;
PD2: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c2 ; c1 ;
PD3: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c1 ; c2 ;
PD4: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; e1(Y) ; c1 ; c2 ;
PD5: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; e2(X) ; c1 ; c2 ;
PD6: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; c1 ; e2(X) ; c2 ;
PD7: l1(X) ; e1(X) ; l1(Y) ; l2(X) ; e1(Y) ; c1 ; e2(X) ; c2 ;
PD8: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; l2(X) ; c1 ; e2(X) ; c2 ;
PD9: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ;
Planificación serializable por conflictos
¡Es una planificación serie!
PD es serializable
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 27
05/03/2022
• Construcción del grafo de precedencia (o de serialización)
– Es un grafo dirigido G = ( N, A )
– N es un conjunto de nodos y A es un conjunto de aristas dirigidas
– Algoritmo:
▪ Crear un nodo por cada transacción Ti en P
▪ Crear una arista Tj →Tk si Tk lee el valor de un elemento después
de que Tj lo haya escrito
▪ Crear una arista Tj →Tk si Tk escribe el valor de un elemento
después de que Tj lo haya leído
▪ Crear una arista Tj →Tk si Tk escribe el valor de un elemento
después de que Tj lo haya escrito
Ti
Detección de la serializabilidad por conflictos
Tj Tk
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 28
05/03/2022
• Una arista Tj → Tk indica que Tj debe aparecer antes que Tk
en una planificación serie equivalente a P, pues dos
operaciones en conflicto aparecen en dicho orden en P
• Si el grafo contiene un ciclo, P no es serializable por
conflictos
– Un ciclo es una secuencia de aristas C=((Tj →Tk), (Tk →Tp),... (Ti →Tj))
• Si no hay ciclos en el grafo, P es serializable
Es posible obtener una planificación serie S equivalente a
P, mediante una ordenación topológica de los nodos
Detección de la serializabilidad por conflictos (y 2)
T1 T2
PA
T1 T2
PB
T1 T2
PC
T1 T2
PD
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 29
05/03/2022
Planificación E
Ejemplo de planificación no serializable
Transacción T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);
Transacción T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);
Transacción T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);
T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);
T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);
T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);
T1 T2
Y
X
T3
Y,Z
Y
Hay dos ciclos:
T1→T2→T1 y
T1→T2→T3→T1
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 30
05/03/2022
Planificación F
Ejemplo de planificación serializable
Transacción T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);
Transacción T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);
Transacción T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);
T1
leer_elemento(X);
escribir_elemento(X);
leer_elemento(Y);
escribir_elemento(Y);
T2
leer_elemento(Z);
leer_elemento(Y);
escribir_elemento(Y);
leer_elemento(X);
escribir_elemento(X);
T3
leer_elemento(Y);
leer_elemento(Z);
escribir_elemento(Y);
escribir_elemento(Z);
T1 T2
X,Y
T3
Y,Z
Y
La planificación
serie equivalente
es T3 → T1 → T2
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 31
05/03/2022
Es el SO el que distribuye los recursos
para los procesos, y determina la
intercalación de las operaciones de las
transacciones concurrentes
(ejecutadas como procesos del SO)
Planificación P
(ordenamiento de
las operaciones)
• Carga del sistema
• Momento de
introducción de las
transacciones
• Prioridades de los
procesos
...
Planificador de
Tareas del SO
Aplicaciones de la serializabilidad
Es necesario encontrar técnicas que garanticen la
serializabilidad, sin tener que verificar a posteriori
¡¡enfoque muy
poco práctico!!
Parece, pues, que habría que
comprobar si P es serializable
una vez ejecutadas las
transacciones incluidas en P...
Ejecución de
Transacciones
NO
SI
OK
Cancelar el
efecto de P
reintentar
¿P serializable?
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 32
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 33
05/03/2022
• Métodos basados en la teoría de la serializabilidad,
que definen un conjunto de reglas (o protocolo) tal que...
– si todas las transacciones las cumplen, o
– el subsistema de control de concurrencia del SGBD las
impone (automáticamente)
... se asegura la serializabilidad de toda planificación
de transacciones
• Clasificación
– Métodos de bloqueo
– Métodos de marca de tiempo
– Técnicas de multiversión
– Métodos optimistas
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 34
05/03/2022
• Uso de bloqueos para controlar el acceso concurrente a los
elementos de datos almacenados en la base de datos
• Reglas básicas del bloqueo:
– Bloqueo compartido: si una transacción tiene un bloqueo
compartido sobre un elemento de datos, puede leer el elemento,
pero no actualizarlo (escribir)
▪ Varias transacciones pueden mantener a la vez bloqueos compartidos
sobre el mismo elemento
– Bloqueo exclusivo: si una transacción tiene un bloqueo exclusivo
sobre un elemento de datos, puede leer y actualizar (escribir) el
elemento
▪ Un bloqueo exclusivo proporciona acceso exclusivo al elemento
Métodos de bloqueo
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 35
05/03/2022
Reglas de uso de los bloqueos
1. T debe emitir bloquear_lectura(X) o bloquear_escritura(X) antes de
ejecutar una operación leer_elemento(X)
2. T debe emitir bloquear_escritura(X) antes de realizar una
operación escribir_elemento(X) en T
3. T debe emitir desbloquear(X) una vez completadas todas las
operaciones leer_elemento(X) y escribir_elemento(X)
4. Si T ya posee un bloqueo, compartido o exclusivo, sobre X
no emitirá bloquear_lectura(X) ni bloquear_escritura(X)
*esta regla puede permitir excepciones: mejora y reducción de bloqueos*
5. T no emitirá desbloquear(X) salvo si posee un bloqueo,
compartido o exclusivo, sobre X
Métodos de bloqueo
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 36
05/03/2022
• Cuando una transacción T solicita un bloqueo…
– Si el elemento no ha sido ya bloqueado por otra transacción, se
le concede el bloqueo
– Si el elemento sí está bloqueado, el SGBD determina si la solicitud
es compatible con el bloqueo existente:
▪ Si se pide un bloqueo compartido sobre un elemento que ya tiene un
bloqueo compartido, el bloqueo será concedido a T
▪ En otro caso, T debe esperar hasta que se libere el bloqueo existente
• Una transacción que obtiene un bloqueo lo mantiene hasta
que lo libera explícitamente o termina (commit o rollback)
– Sólo cuando se libera un bloqueo exclusivo los efectos de la escritura
serán visibles para las demás transacciones
Métodos de bloqueo
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 37
05/03/2022
• Algunos sistemas permiten la mejora (o promoción) y la
reducción (o degradación) de bloqueos
– Aumenta el nivel de concurrencia del sistema
• Si T emitió bloquear_lectura(X), más tarde puede mejorarlo a
bloqueo exclusivo emitiendo bloquear_escritura(X)
– Si T es la única que tiene un bloqueo compartido sobre X, se le
concede la solicitud
– En otro caso, T debe esperar
• Si T emitió bloquear_escritura(X), más tarde puede reducirlo a
un bloqueo compartido emitiendo bloquear_lectura(X)
– Así permite que otras transacciones lean X
Métodos de bloqueo
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 38
05/03/2022
• El uso de bloqueos para la programación de transacciones
no garantiza la serializabilidad de las planificaciones
Métodos de bloqueo
Planificación G
T4
bloquear_lectura(Y);
leer_elemento(Y);
desbloquear(Y);
bloquear_escritura(X);
leer_elemento(X);
X:=X+Y;
escribir_elemento(X);
desbloquear(X);
T5
bloquear_lectura(X);
leer_elemento(X);
desbloquear(X);
bloquear_escritura(Y);
leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y);
desbloquear(Y);
Transacción T4
bloquear_lectura(Y);
leer_elemento(Y);
desbloquear(Y);
bloquear_escritura(X);
leer_elemento(X);
X:=X+Y;
escribir_elemento(X);
desbloquear(X);
Transacción T5
bloquear_lectura(X);
leer_elemento(X);
desbloquear(X);
bloquear_escritura(Y);
leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y);
desbloquear(Y);
Valores iniciales: X=20, Y=30
Resultados de las planificaciones serie:
T4→T5: X=50, Y=80
T5→T4: X=70, Y=50
Resultado de la planificación G:
X=50, Y=50 (No serializable!)
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 39
05/03/2022
Es necesario seguir un protocolo adicional que indique
dónde colocar las operaciones de bloqueo y
desbloqueo dentro de las transacciones
• El más conocido es el Bloqueo en Dos Fases (B2F)
• Una transacción T sigue el protocolo de bloqueo en dos
fases si todas las operaciones de bloqueo preceden a
la primera operación de desbloqueo
De este modo, podemos ver T dividida en dos fases:
– Fase de expansión (o crecimiento)
▪ T puede adquirir bloqueos
▪ T no puede liberar ningún bloqueo
– Fase de contracción
▪ T puede liberar bloqueos existentes
▪ T no puede adquirir ningún bloqueo
Métodos de bloqueo: Bloqueo en dos fases
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 40
05/03/2022
• Si el sistema permite mejorar y reducir bloqueos…
– La mejora sólo puede tener lugar en la fase de expansión
– La reducción sólo puede realizarse en la fase de contracción
En el código de T, un bloquear_lectura(X) puede aparecer en la fase de
contracción de T sólo si reduce un bloqueo exclusivo a uno compartido
Bloqueo en dos fases
Transacción T4’
bloquear_lectura(Y);
leer_elemento(Y);
bloquear_escritura(X);
desbloquear(Y);
leer_elemento(X);
X:=X+Y;
escribir_elemento(X);
desbloquear(X);
Transacción T5’
bloquear_lectura(X);
leer_elemento(X);
bloquear_escritura(Y);
desbloquear(X);
leer_elemento(Y);
Y:=X+Y;
escribir_elemento(Y);
desbloquear(Y);
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 41
05/03/2022
• Si toda transacción de una planificación sigue el
protocolo de bloqueo en dos fases, entonces la
planificación es serializable
• Ventaja
– Ya no es necesario comprobar la serializabilidad de las
planificaciones
• Inconvenientes
– El B2F puede limitar el grado de concurrencia en un plan
– Emplear bloqueos puede provocar problemas de ...
▪ Interbloqueo (bloqueo mortal o abrazo mortal)
▪ Bloqueo indefinido (o espera indefinida)
Bloqueo en dos fases
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 42
05/03/2022
• T debe bloquear todos los elementos a los que tendrá
acceso (lectura o escritura) antes de comenzar a ejecutarse
– Si no es posible bloquear algún elemento, T no bloqueará
ninguno y esperará para reintentarlo más tarde
– Protocolo libre de interbloqueo
Bloqueo en dos fases conservador o estático
Bloqueo en dos fases estricto el más utilizado
• T no libera ningún bloqueo exclusivo hasta terminar (con
COMMIT o ROLLBACK)
– Ninguna transacción lee o escribe un elemento modificado
por T, salvo si T se ha completadoplanificación estricta
– Puede sufrir interbloqueo (salvo si se combina con B2F conservador)
Bloqueo en dos fases riguroso más restrictivo que el B2F estricto
• T no libera ningún bloqueo compartido ni exclusivo hasta
terminar (con COMMIT o ROLLBACK) planificación estricta
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 43
05/03/2022
• Situación en la que cada una de dos (o más)
transacciones está esperando a que se libere un
bloqueo establecido por la otra transacción
El problema del interbloqueo
T6
bloquear_escritura(X);
leer_elemento(X);
X:=X-10;
escribir_elemento(X);
bloquear_escritura(Y);
[… en espera …]
T7
bloquear_escritura(Y);
leer_elemento(Y);
Y:=Y+100;
escribir_elemento(Y);
bloquear_escritura(Y);
[… en espera …]
• El SGBD ha de reconocer un interbloqueo y romperlo:
– Abortar una o más transacciones
▪ Se deshacen sus escrituras y se liberan sus bloqueos
Así, el resto de transacciones podrá continuar su ejecución
– Reiniciar automáticamente las transacciones abortadas
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 44
05/03/2022
• Hay 3 técnicas generales para gestionar los interbloqueos
– Temporizaciones de bloqueos
– Prevención de interbloqueos
– Detección de interbloqueos
• Conviene detectar interbloqueos cuando se sabe que hay
poca interferencia entre transacciones, es decir si...
– Las transacciones son cortas y bloquean pocos elementos, o
– La carga de transacciones es pequeña
• En otro caso, conviene usar temporizaciones o técnicas de
prevención
Es más difícil prevenir que utilizar temporizaciones o que
detectarlos y romperlos, por lo que en la práctica los
sistemas no suelen emplear las técnicas de prevención
El problema del interbloqueo
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 45
05/03/2022
• Una transacción que solicita un bloqueo sólo esperará
durante un período de tiempo predefinido por el sistema
• Si no se concede el bloqueo durante ese tiempo, se
producirá un ‘fin de temporización’: el SGBD asumirá que la
transacción está interbloqueada (aunque puede que no),
la abortará y la reiniciará automáticamente
Es una solución muy sencilla y práctica
Pero puede hacer que sean abortadas y reiniciadas
transacciones que en realidad no están en un interbloqueo
Temporizaciones de bloqueos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 46
05/03/2022
• Ordenar las transacciones usando marcas temporales de
transacción MT(T):
▪ Identificador único para T
▪ Las MT se ordenan según se inician las transacciones
▪ La T más antigua tiene la MT(T) menor
Sea Tj que intenta bloquear el elemento de datos X ,
pero X ya está bloqueado por Tk con un candado en conflicto
• Algoritmo Esperar - Morir
si MT(Tj) < MT(Tk) entonces Tj puede esperar
si no, se aborta Tj (Tj muere) y
se reinicia después con la misma marca de tiempo
 Una Tj más antigua espera a que termine otra Tk más reciente
 Una Tj más reciente que solicita un elemento bloqueado por una Tk
más antigua, es abortada (muere) y reiniciada
Prevención de interbloqueos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 47
05/03/2022
• Algoritmo Herir - Esperar
si MT(Tj) < MT(Tk) entonces se aborta Tk (Tj hiere a Tk) y
se reinicia después con la misma MT
si no, Tj puede esperar
 Una Tj más reciente espera a que termine una Tk más antigua
 Una Tj más antigua que solicita un elemento bloqueado por una Tk
más reciente, hace que la más reciente sea abortada (es herida) y reiniciada
• Inconvenientes
– Ambos algoritmos hacen que sean abortadas y reiniciadas
transacciones que podrían provocar un bloqueo mortal, aunque
tal cosa nunca ocurriera!
– En el algoritmo Esperar-Morir, una Tj podría abortar y reiniciarse
varias veces seguidas si Tk más antigua sigue bloqueando el X que
Tj solicita
Prevención de interbloqueos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 48
05/03/2022
• Verificación periódica del estado del sistema
¿está en un bloqueo mortal?
• Creación de un grafo de espera que muestra las
dependencias entre transacciones
– Crear un nodo por cada transacción en ejecución, etiquetado con el
identificador de la transacción, T
– Si Tj espera para bloquear el elemento X, ya bloqueado por Tk, crear
una arista dirigida desde Tj a Tk
– Cuando Tk libera el candado sobre X, borrar la arista
correspondiente
• Si existe un ciclo en el grafo de espera, entonces se ha
detectado un interbloqueo entre las transacciones
Detección de interbloqueos
Tj Tk
X
Tj Tk
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 49
05/03/2022
• Pero... ¿cuándo hay que verificar el estado del sistema
(ejecutar el algoritmo que genera el grafo de espera)?
– A intervalos uniformes de tiempo, o
– A intervalos de tiempo desiguales :
▪ Iniciar algoritmo de detección con un tamaño de intervalo inicial
▪ Cada vez que no se detecta interbloqueo, incrementar el intervalo
– Por ejemplo, al doble del anterior
▪ Cada vez que se detecta interbloqueo, reducir el intervalo
– Por ejemplo a la mitad
▪ Existirán límites superior e inferior del tamaño del intervalo
Detección de interbloqueos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 50
05/03/2022
• Si el sistema está en un estado de interbloqueo, el SGBD
necesita abortar algunas transacciones...
• ¿Cuáles?  Selección de víctimas
– Es mejor abortar transacciones que lleven poco tiempo en
ejecución
– Es mejor abortar una transacción que haya hecho pocos cambios
en la base de datos
– Es mejor abortar una transacción que todavía debe hacer muchos
cambios en la base de datos
▪ Puede que el SGBD no conozca esta información
Se trata de abortar las transacciones que supongan el
mínimo coste
• Es necesario evitar la inanición
Detección de interbloqueos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 51
05/03/2022
• Una transacción sufre inanición cuando es seleccionada
para ser abortada (víctima) sucesivamente: nunca
termina su ejecución
– Es similar al bloqueo indefinido
• La solución es asignar prioridades más altas a las
transacciones abortadas varias veces, para no ser siempre
las víctimas
Detección de interbloqueos: el problema de la inanición
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 52
05/03/2022
• El protocolo de control de concurrencia nunca selecciona
a una transacción que está esperando para
establecer un bloqueo, mientras otras transacciones
continúan ejecutándose con normalidad
– Ocurre si el esquema de espera da más prioridad a unas
transacciones que a otras  esquema de espera injusto
• Dos algoritmos de prevención de bloqueo indefinido
– Consiguen un esquema de espera justo
▪ El primero que llega, es el primero en ser atendido
• Las transacciones puede bloquear el elemento X en el orden en
que solicitaron su bloqueo
▪ Aumento de prioridad en la espera
• Cuanto más espera T, mayor es su prioridad
• Cuando T tiene la prioridad más alta de todas, obtiene el bloqueo
y continúa su ejecución
El problema del bloqueo indefinido
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 53
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 54
05/03/2022
• Toda técnica de control de concurrencia supone que la base
de datos está constituida por un conjunto de elementos de
datos con nombre
• Normalmente, un elemento de datos será uno de estos:
– un valor de campo de un registro de la BD
– un registro de la BD
– una página (uno o varios bloques de disco)
– un fichero
– la BD completa
• Granularidad = tamaño del elemento de información
– Granularidad fina  elementos de tamaño pequeño
– Granularidad gruesa elementos grandes
Elementos de bases de datos y granularidad
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 55
05/03/2022
• En el contexto de los métodos de bloqueo, el tamaño del
elemento de datos afecta al grado de concurrencia:
 tamaño(elemento)   Grado de concurrencia
Y también...
  número de elementos en la BD
  carga de trabajo para la gestión de bloqueos, y
  espacio ocupado por la información de bloqueo
• Pero... ¿Cuál es el tamaño adecuado para los elementos?
Pues depende de la naturaleza de las transacciones:
– Si una T representativa accede a pocos registros
▪ elegir granularidad de registro
– Si T accede a muchos registros de un mismo fichero
▪ elegir granularidad de página o de fichero
Elección del tamaño adecuado del elemento de datos
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 56
05/03/2022
NIVEL DE ABSTRACCIÓN
LÓGICO O CONCEPTUAL:
• Definición del nivel de
aislamiento de cada transacción
(por parte del usuario o, por
omisión, el propio SGBD)
• Control explícito de bloqueos
(operación LOCK) por parte del
usuario, si se permiten niveles de
aislamiento inferiores a
SERIALIZABLE
NIVEL DE ABSTRACCIÓN
FÍSICO O INTERNO:
• El SGBD implementa los niveles
de aislamiento definidos por el
usuario para las transacciones
siguiendo una o varias técnicas
o protocolos
• Por ejemplo el SGBD Oracle usa
dos:
– Bloqueos
– Multiversión
Estos conceptos se tratan en
el anexo de este tema
Estos conceptos se han estudiado
en la teoría de este tema
Aclaración ...
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 57
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 58
05/03/2022
Niveles de aislamiento en MySQL
▪ Para evitar que sucedan los problemas de acceso concurrente que
hemos comentado en el punto inicial de esta unidad, podemos
establecer diferentes niveles de aislamiento que controlan el nivel
de bloqueo durante el acceso a los datos. El estándar ANSI/ISO de
SQL (SQL92) define cuatro niveles de aislamiento.
• Read Uncommitted. En este nivel no se realiza ningún bloqueo, por lo
tanto, permite que sucedan los tres problemas
• Read Committed. En este caso los datos leídos por una transacción
pueden ser modificados por otras transacciones, por lo tanto, se pueden
dar los problemas Non-Repeteable Read y Phantom Read.
• Repeatable Read. En este nivel ningún registro leído con un SELECT
puede ser modificado en otra transacción, por lo tanto, sólo puede
suceder el problema del Phantom Read.
• Serializable. En este caso las transacciones se ejecutan unas detrás
de otras, sin que exista la posibilidad de concurencia.
▪ El nivel de aislamiento que utiliza InnoDB por defecto es
Repeatable Read.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 59
05/03/2022
Niveles de aislamiento en MySQL
▪ La siguiente tabla muestra los problemas de lectura
que pueden ocurrir en cada uno de los modos de
aislamiento.
Nivel
Dirty Read (Lectura
sucia)
Non-Repeatable
Read (Lectura No
Repetible)
Phantom Read
(Lectura fantasma)
Read Uncommitted Es posible Es posible Es posible
Read Committed - Es posible Es posible
Repeatable Read - - Es posible
Serializable - - -
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 60
05/03/2022
Niveles de aislamiento en MySQL
▪ Podemos consultar el nivel de aislamiento que estamos
utilizando, consultando el contenido de la variable global y
de sesión @@transaction_isolation.
▪ También podemos consultar el contenido de la variable de
sesión sin utilizar la palabra reservada SESSION.
-- Variable global
SELECT @@GLOBAL.transaction_isolation;
-- Variable de sesión
SELECT @@SESSION.transaction_isolation;
SELECT @@transaction_isolation;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 61
05/03/2022
Ejemplo 1: Evaluación de los niveles de
aislamiento ante el problema Dirty Read.
▪ En este ejemplo vamos a simular que hay dos
usuarios que quieren acceder de forma
concurrente a los mismos datos de una tabla.
▪ Para simular los dos usuarios vamos a iniciar dos
terminales para conectarnos a un servidor MySQL.
▪ Desde el terminal A vamos a ejecutar las
siguientes sentencias SQL:
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 62
05/03/2022
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cuentas (
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK (saldo >= 0)
);
INSERT INTO cuentas VALUES (1, 1000);
INSERT INTO cuentas VALUES (2, 2000);
INSERT INTO cuentas VALUES (3, 0);
-- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha
finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 63
05/03/2022
Ahora desde el terminal B ejecute las siguientes sentencias SQL:
-- 1. Seleccionamos la base de datos
USE test;
-- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 3. Iniciamos una transacción y observamos los datos que existen en la tabla cuentas
START TRANSACTION;
SELECT * FROM cuentas WHERE id = 1;
Ahora ejecute ROLLBACK en el terminal A para finalizar la transacción que estaba sin
finalizar.
-- 3. Deshacemos las operaciones realizadas en la transacción
ROLLBACK;
Desde el terminal B vuelva a ejecutar esta sentencia:
-- 4. Observamos los datos que existen en la tabla cuentas
SELECT * FROM cuentas WHERE id = 1;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 64
05/03/2022
Ejemplo 1: Evaluación de los niveles de
aislamiento ante el problema Dirty Read.
▪ ¿Qué es lo que ha sucedido? Repita el ejercicio utilizando los otros
niveles de aislamiento (READ COMMITTED, REPEATABLE READ
y SERIALIZABLE). Tendrá que configurar el nivel de aislamiento
que va a utilizar durante la sesión con las siguientes sentencias:
• SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
• SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
• SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 65
05/03/2022
Ejemplo 2: Evaluación de los niveles de aislamiento
ante el problema Non-Repeatable Read.
▪ En este ejemplo vamos a simular que hay dos
usuarios que quieren acceder de forma
concurrente a los mismos datos de una tabla. Para
simular los dos usuarios vamos a iniciar dos
terminales para conectarnos a un servidor MySQL.
▪ Desde el terminal A vamos a ejecutar las
siguientes sentencias SQL:
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 66
05/03/2022
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cuentas (
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK (saldo >= 0)
);
INSERT INTO cuentas VALUES (1, 1000);
INSERT INTO cuentas VALUES (2, 2000);
INSERT INTO cuentas VALUES (3, 0);
-- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas
START TRANSACTION;
SELECT * FROM cuentas WHERE id = 1;
NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha
finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 67
05/03/2022
Ahora desde el terminal B ejecute las siguientes sentencias SQL:
Ahora volvemos a ejecutar en el terminal A la misma consulta que ejecutamos al inicio de
la transacción.
-- 1. Seleccionamos la base de datos
USE test;
-- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 3. Iniciamos una transacción y atualizamos los datos de la tabla cuentas
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
-- 4. Finalizamos la transacción con COMMIT
COMMIT;
-- 4. Volvemos a ejecutar la misma sentencia para observar los datos que existen en la tabla cuentas
SELECT saldo FROM cuentas WHERE id = 1;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 68
05/03/2022
Ejemplo 2: Evaluación de los niveles de aislamiento
ante el problema Non-Repeatable Read.
▪ ¿Qué es lo que ha sucedido? Repita el ejercicio utilizando los otros
niveles de aislamiento (READ COMMITTED, REPEATABLE READ
y SERIALIZABLE). Tendrá que configurar el nivel de aislamiento
que va a utilizar durante la sesión con las siguientes sentencias:
• SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
• SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
• SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 69
05/03/2022
Ejemplo 3: Evaluación de los niveles de
aislamiento ante el problema Phantom Read.
▪ En este ejemplo vamos a simular que hay dos
usuarios que quieren acceder de forma
concurrente a los mismos datos de una tabla. Para
simular los dos usuarios vamos a iniciar dos
terminales para conectarnos a un servidor MySQL.
▪ Desde el terminal A vamos a ejecutar las
siguientes sentencias SQL:
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 70
05/03/2022
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cuentas (
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK (saldo >= 0)
);
INSERT INTO cuentas VALUES (1, 1000);
INSERT INTO cuentas VALUES (2, 2000);
INSERT INTO cuentas VALUES (3, 0);
-- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas
START TRANSACTION;
SELECT SUM(saldo) FROM cuentas;
NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha
finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 71
05/03/2022
Ahora desde el terminal B ejecute las siguientes sentencias SQL:
Ahora volvemos a ejecutar en el terminal A la misma consulta que ejecutamos al inicio de
la transacción.
-- 1. Seleccionamos la base de datos
USE test;
-- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 3. Iniciamos una transacción y atualizamos los datos de la tabla cuentas
START TRANSACTION; INSERT INTO cuentas VALUES (4, 3000);
-- 4. Finalizamos la transacción con COMMIT
COMMIT;
-- 4. Volvemos a ejecutar la misma sentencia para observar los datos que existen en la tabla cuentas
SELECT SUM(saldo) FROM cuentas;
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 72
05/03/2022
Contenido
▪ Introducción y problemas de la concurrencia
▪ Serializabilidad
▪ Técnicas de control de la concurrencia
▪ Granularidad de datos
▪ Niveles de aislamiento en MySQL
▪ Políticas de bloqueo en MySQL
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 73
05/03/2022
Políticas de bloqueo en MySQL
▪ Cuando una transacción accede a los datos lo hace
de forma exclusiva, de modo que una transacción no
podrá acceder a los datos que están siendo utilizados
por una transacción hasta que ésta haya terminado.
▪ El bloqueo de los datos se puede realizar a nivel de:
• Base de datos.
• Tabla.
• Fila.
• Columna.
▪ InnoDB realiza por defecto un bloqueo a nivel de fila.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 74
05/03/2022
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cuentas (
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK (saldo >= 0)
);
INSERT INTO cuentas VALUES (1, 1000);
INSERT INTO cuentas VALUES (2, 2000);
INSERT INTO cuentas VALUES (3, 0);
-- 1. Ejecutamos una transacción para transfereir dinero entre dos cuentas
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
En este ejemplo vamos a simular que hay dos usuarios que quieren acceder de forma
concurrente a los mismos datos de una tabla. Para simular los dos usuarios vamos a iniciar dos
terminales para conectarnos a un servidor MySQL. Desde el terminal A vamos a ejecutar las
siguientes sentencias SQL:
NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha
finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 75
05/03/2022
Ahora desde el terminal B ejecute las siguientes sentencias SQL:
-- 1. Seleccionamos la base de datos
USE test;
-- 2. Observamos los datos que existen en la tabla cuentas
SELECT * FROM cuentas;
-- 3. Intentamos actualizar el saldo de una de las cuentas que está siendo utilizada en la transacción del
terminal A
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
¿Qué es lo que ha ocurrido en el terminal B? ¿Puedo acceder a los datos para consultaros?
¿Y para modificarlos? ¿Puedo modificar desde el terminal B una cuenta bancaria que no esté
siendo utilizada por la transacción del terminal A?
Ahora ejecute COMMIT en el terminal A para finalizar la transacción que estaba sin finalizar.
¿Qué es lo que ha sucedido?
Bases de Datos Carrera de Software
Ph.D. Franklin Parrales 76
05/03/2022
Concurrencia
Unidad 9
Final de la unidad
Y del curso…. !Muchas gracias
a todos!

Más contenido relacionado

La actualidad más candente

Enfoque estructurado y Enfoque OO - Ingenieria de software
Enfoque estructurado y Enfoque OO  - Ingenieria de softwareEnfoque estructurado y Enfoque OO  - Ingenieria de software
Enfoque estructurado y Enfoque OO - Ingenieria de softwareKola Real
 
Arquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos OracleArquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos Oraclevinivaldivieso
 
ARQUITECTURAS PARALELAS
ARQUITECTURAS PARALELASARQUITECTURAS PARALELAS
ARQUITECTURAS PARALELASAlumic S.A
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoJosé Antonio Sandoval Acosta
 
Trabajo 2 transacciones en base de datos
Trabajo 2   transacciones en base de datosTrabajo 2   transacciones en base de datos
Trabajo 2 transacciones en base de datosJose O- Vera
 
Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Julicamargo
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaRobert Rodriguez
 
Organización y arquitectura de computadores
Organización y arquitectura de computadoresOrganización y arquitectura de computadores
Organización y arquitectura de computadoresSofylutqm
 
BD. control de concurrencia
BD. control de concurrenciaBD. control de concurrencia
BD. control de concurrencialiras loca
 
Modelos de Base de Datos
Modelos de Base de DatosModelos de Base de Datos
Modelos de Base de DatosAxel Mérida
 
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniPrototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniRAUL CHIPANA LARICO
 
Fundamentos de BD - Unidad 4 diseño de bd relacional
Fundamentos de BD - Unidad 4 diseño de bd relacionalFundamentos de BD - Unidad 4 diseño de bd relacional
Fundamentos de BD - Unidad 4 diseño de bd relacionalJosé Antonio Sandoval Acosta
 

La actualidad más candente (20)

Enfoque estructurado y Enfoque OO - Ingenieria de software
Enfoque estructurado y Enfoque OO  - Ingenieria de softwareEnfoque estructurado y Enfoque OO  - Ingenieria de software
Enfoque estructurado y Enfoque OO - Ingenieria de software
 
Administracion de Bases de datos
Administracion de Bases de datosAdministracion de Bases de datos
Administracion de Bases de datos
 
Uml presentacion
Uml   presentacionUml   presentacion
Uml presentacion
 
Arquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos OracleArquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos Oracle
 
ARQUITECTURAS PARALELAS
ARQUITECTURAS PARALELASARQUITECTURAS PARALELAS
ARQUITECTURAS PARALELAS
 
Fundamentos de las bases de datos
Fundamentos de las bases de datosFundamentos de las bases de datos
Fundamentos de las bases de datos
 
examen de base de datos
examen de base de datosexamen de base de datos
examen de base de datos
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
 
Tipos Primitivos y Elementos Léxicos de Java
Tipos Primitivos y Elementos Léxicos de JavaTipos Primitivos y Elementos Léxicos de Java
Tipos Primitivos y Elementos Léxicos de Java
 
Trabajo 2 transacciones en base de datos
Trabajo 2   transacciones en base de datosTrabajo 2   transacciones en base de datos
Trabajo 2 transacciones en base de datos
 
Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.
 
TRANSACCIONES
TRANSACCIONESTRANSACCIONES
TRANSACCIONES
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, Asistencia
 
Organización y arquitectura de computadores
Organización y arquitectura de computadoresOrganización y arquitectura de computadores
Organización y arquitectura de computadores
 
Diagrama de Actividades
Diagrama de ActividadesDiagrama de Actividades
Diagrama de Actividades
 
BD. control de concurrencia
BD. control de concurrenciaBD. control de concurrencia
BD. control de concurrencia
 
Modelos de Base de Datos
Modelos de Base de DatosModelos de Base de Datos
Modelos de Base de Datos
 
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniPrototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
 
Fundamentos de BD - Unidad 4 diseño de bd relacional
Fundamentos de BD - Unidad 4 diseño de bd relacionalFundamentos de BD - Unidad 4 diseño de bd relacional
Fundamentos de BD - Unidad 4 diseño de bd relacional
 
Base de Datos Orientada a Objetos
Base de Datos Orientada a ObjetosBase de Datos Orientada a Objetos
Base de Datos Orientada a Objetos
 

Similar a DB1 Unidad 9: Concurrencia

Similar a DB1 Unidad 9: Concurrencia (20)

Base datos
Base datosBase datos
Base datos
 
Diseño de una base de datos
Diseño de una base de datosDiseño de una base de datos
Diseño de una base de datos
 
Data Warehouse en las empresas y negocios.pdf
Data Warehouse en las empresas y negocios.pdfData Warehouse en las empresas y negocios.pdf
Data Warehouse en las empresas y negocios.pdf
 
taller de bd
taller de bdtaller de bd
taller de bd
 
Concurrencia 1 ABD UCV
Concurrencia 1 ABD UCVConcurrencia 1 ABD UCV
Concurrencia 1 ABD UCV
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furioso
 
Bases De Datos
Bases De DatosBases De Datos
Bases De Datos
 
Abd clase 5 y 6
Abd clase 5 y 6Abd clase 5 y 6
Abd clase 5 y 6
 
SQL_ADO.NET.ppt
SQL_ADO.NET.pptSQL_ADO.NET.ppt
SQL_ADO.NET.ppt
 
SQL_ADO.NET.pptx
SQL_ADO.NET.pptxSQL_ADO.NET.pptx
SQL_ADO.NET.pptx
 
Diseño de una base de datos
Diseño de una base de datosDiseño de una base de datos
Diseño de una base de datos
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptx
 
base de datos #1
base de datos #1base de datos #1
base de datos #1
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetosED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
 
Bases de Datos II (II Bimestre)
Bases de Datos II (II Bimestre)Bases de Datos II (II Bimestre)
Bases de Datos II (II Bimestre)
 
Franco
FrancoFranco
Franco
 
Franco
FrancoFranco
Franco
 
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
 
Bases de Datos - Parte 2/10 Sistemas de bases de datos
Bases de Datos - Parte 2/10 Sistemas de bases de datosBases de Datos - Parte 2/10 Sistemas de bases de datos
Bases de Datos - Parte 2/10 Sistemas de bases de datos
 

Más de Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 

Más de Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 

DB1 Unidad 9: Concurrencia

  • 1. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 1 05/03/2022 Concurrencia Unidad 9 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Bases de datos
  • 2. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 2 05/03/2022 Control de la concurrencia Objetivos ▪ Conocer la problemática asociada a la concurrencia de transacciones en los sistemas de bases de datos ▪ Entender el significado de la serializabilidad y su aplicación al control de la concurrencia ▪ Comprender algunas técnicas para el control de la concurrencia empleadas por los sistemas gestores de bases de datos
  • 3. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 3 05/03/2022 Control de la concurrencia Bibliografía ▪ [CB 2005] Connolly, T.; Begg C.: Sistemas de bases de datos. 4ª Edición. Pearson Educación. Addison Wesley. (Cap. 20) ▪ [EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de Sistemas de Bases de Datos. 3ª Edición. Addison- Wesley. (Cap. 19 y 20) ▪ [EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos. Conceptos fundamentales. 2ª Edición. Addison-Wesley Iberoamericana. (Cap. 17 y 18)
  • 4. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 4 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 5. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 5 05/03/2022 ▪ Los sistemas de bases de datos, según el número de usuarios que pueden utilizarlos de forma concurrente, se clasifican en sistemas monousuario y multiusuario ▪ Varios usuarios pueden usar un mismo equipo a la vez gracias a la multiprogramación: el computador puede procesar al mismo tiempo varias transacciones • Si el equipo tiene varias CPU, es posible el procesamiento simultáneo (paralelo) de transacciones • Si sólo hay una CPU, el SO de multiprogramación reparte el tiempo de CPU entre las transacciones: ejecución concurrente intercalada  modelo que supondremos
  • 6. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 6 05/03/2022 ▪ Varias transacciones introducidas por usuarios, que se ejecutan de manera concurrente, pueden leer/modificar los mismos elementos almacenados en la base de datos ▪ Razones para permitir la concurrencia: • Aumentar la productividad: número de transacciones ejecutadas por minuto. • Aumentar la utilización de la CPU (menos tiempo ociosa) y Control del disco. • Reducir el tiempo medio de respuesta de transacciones (las ‘pequeñas’ no esperan a las ‘grandes’).
  • 7. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 7 05/03/2022 ▪ ... porque pueden surgir problemas si las transacciones concurrentes se ejecutan de manera no controlada ▪ Ejemplo sencillo: sistema de bases de datos que permite hacer y anular reservas de plazas en vuelos de diferentes compañías aéreas. • Se almacena un registro por cada vuelo, que incluye, entre otras cosas, el número de asientos reservados en el vuelo • Sean dos transacciones T1 y T2 concurrentes: • T1 transfiere N reservas realizadas en un vuelo X a otro vuelo Y • T2 reserva M plazas en el vuelo X ¿Por qué es necesario el control de la concurrencia?
  • 8. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 8 05/03/2022 Problemas potenciales provocados por la concurrencia Transacción T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); Transacción T2 leer_elemento(X); X:= X+M; escribir_elemento(X); • Aunque las transacciones pueden ser perfectamente correctas en sí mismas, la ejecución concurrente de T1 y T2 puede producir un resultado incorrecto, debido a la intercalación de sus operaciones, poniendo en cuestión la integridad y la coherencia de la base de datos
  • 9. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 9 05/03/2022 ▪ La actualización perdida • T1 y T2 que acceden a los mismos datos, tienen sus operaciones intercaladas de modo que hacen incorrecto el valor de algún dato Problemas potenciales provocados por la concurrencia T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T2 leer_elemento(X); X:= X+M; escribir_elemento(X); El elemento X tiene un valor incorrecto porque su actualización por T1 se ‘perdió’ (se sobreescribió)
  • 10. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 10 05/03/2022 ▪ La actualización temporal (o lectura sucia/Dirty Read) • T1 actualiza un elemento X de la BD y luego falla, pero antes de que se restaure el valor original de X, T2 tiene acceso al «valor temporal» de X Problemas potenciales provocados por la concurrencia T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); … T2 leer_elemento(X); X:= X+M; escribir_elemento(X); T1 falla y debe devolver a X su antiguo valor; pero mientras, T2 ha leído el valor ‘temporal’ incorrecto de X (dato sucio)
  • 11. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 11 05/03/2022 ▪ La actualización temporal (o lectura sucia/Dirty Read) • Sucede cuando una segunda transacción lee datos que están siendo modificados por una transacción antes de que haga COMMIT. Problemas potenciales provocados por la concurrencia Transacción 1 Transacción 2 UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; SELECT saldo FROM cuentas WHERE id = 1; ROLLBACK
  • 12. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 12 05/03/2022 ▪ El resumen incorrecto/Lectura fantasma (Phantom Read) • Otra transacción T3 calcula una función agregada de resumen sobre varios registros (suma las plazas reservadas para todos los vuelos), mientras otras transacciones, como T1, actualizan dichos registros: puede que T3 considere unos registros antes de ser actualizados y otros después Problemas potenciales provocados por la concurrencia T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T3 suma:=0; leer_elemento(A); suma:= suma+A; … … … leer_elemento(X); suma:= suma+X; leer_elemento(Y); suma:= suma+Y; … … … T3 lee X después de restar N, pero lee Y antes de sumar N, así que el resultado es un resumen incorrecto (discrepancia de N)
  • 13. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 13 05/03/2022 ▪ El resumen incorrecto/Lectura fantasma (Phantom Read) • Este error ocurre cuando una transacción ejecuta dos veces una consulta que devuelve un conjunto de filas y en la segunda ejecución de la consulta aparecen nuevas filas en el conjunto que no existían cuando se inició lo transacción. Problemas potenciales provocados por la concurrencia Transacción 1 Transacción 2 SELECT SUM(saldo) FROM cuentas; INSERT INTO cuentas VALUES (4, 3000); SELECT SUM(saldo) FROM cuentas;
  • 14. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 14 05/03/2022 ▪ La lectura no repetible (Non-Repeatable Read) • T4 lee un elemento X dos veces y otra transacción, como T1, modifica dicho X entre las dos lecturas: T4 recibe diferentes valores para el mismo elemento Problemas potenciales provocados por la concurrencia T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T4 leer_elemento(X); … leer_elemento(X); … T4 lee X antes de restar N T4 lee X después de restar N
  • 15. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 15 05/03/2022 ▪ La lectura no repetible (Non-Repeatable Read) • Se produce cuando una transacción consulta el mismo dato dos veces durante la ejecución de la transacción y la segunda vez encuentra que el valor del dato ha sido modificado por otra transacción. Problemas potenciales provocados por la concurrencia Transacción 1 Transacción 2 SELECT saldo FROM cuentas WHERE id = 1; UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; SELECT saldo FROM cuentas WHERE id = 1;
  • 16. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 16 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 17. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 17 05/03/2022 ▪ Objetivo de un protocolo de control de concurrencia: • Planificar las transacciones de forma que no ocurran interferencias entre ellas, y así evitar la aparición de los problemas mencionados ▪ Solución obvia: no permitir intercalación de operaciones de varias transacciones Motivación Planificación A T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T2 leer_elemento(X); X:= X+M; escribir_elemento(X); Planificación B T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T2 leer_elemento(X); X:= X+M; escribir_elemento(X);
  • 18. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 18 05/03/2022 • Pero el objetivo de un SGBD multiusuario también es maximizar el grado de concurrencia del sistema • Si se permite la intercalación de operaciones, existen muchos órdenes posibles de ejecución de las transacciones Motivación ¿Existe algún modo de identificar las ejecuciones que está garantizado que protegen la consistencia de la base de datos? Teoría de la Serializabilidad Planificación C: actualización perdida! T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T2 leer_elemento(X); X:= X+M; escribir_elemento(X); Planificación D: correcta! T1 leer_elemento(X); X:= X-N; escribir_elemento(X); leer_elemento(Y); Y:=Y+N; escribir_elemento(Y); T2 leer_elemento(X); X:= X+M; escribir_elemento(X);
  • 19. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 19 05/03/2022 • Cada transacción comprende una secuencia de operaciones que incluyen acciones de lectura y escritura en la BD, que finaliza con una confirmación (commit) o anulación (rollback) • Una planificación P de n transacciones concurrentes T1, T2 ... Tn es una secuencia de las operaciones realizadas por dichas transacciones, sujeta a la restricción de que para cada transacción Ti que participa en P, sus operaciones aparecen en P en el mismo orden en el que ocurren en Ti Planificación de transacciones
  • 20. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 20 05/03/2022 • Para el control de la concurrencia (y recuperación de fallos) interesa prestar mayor atención a estas operaciones: • Ejemplos de planificaciones de transacciones – El subíndice de cada operación indica la transacción que la realiza PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ; PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ; PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ; PE: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; r1 ; Planificación de transacciones operación abreviatura leer_elemento l escribir_elemento e commit c rollback r
  • 21. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 21 05/03/2022 • Una planificación serie P es aquella en la que las operaciones de cada transacción se ejecutan consecutivamente sin que se intercalen operaciones de otras transacciones PA: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ; PB: l2(X) ; e2(X) ; c2 ; l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; • Toda planificación serie es correcta BD consistente • Pero no se garantiza que los resultados de todas las ejecuciones en serie de las mismas transacciones sean idénticos – Ejemplo: cálculo del interés de una cuenta bancaria antes o después de realizar un ingreso considerable en general, son inaceptables en la práctica (ineficiencia) Planificación serie
  • 22. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 22 05/03/2022 • Una planificación no serie P es aquella en la que las operaciones de un conjunto de transacciones concurrentes se ejecutan intercaladas PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1 ; PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ; • Hemos de determinar qué planificaciones no serie permiten llevar la BD a un estado al que pueda llegarse mediante una ejecución en serie Planificación no serie Este es el objetivo de la Serializabilidad KO
  • 23. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 23 05/03/2022 • Una planificación P (no serie) es serializable si es equivalente a alguna planificación serie de las mismas n transacciones – Una planificación que no es equivalente a ninguna ejecución en serie, es una planificación no serializable • Toda planificación serializable es correcta – Produce los mismos resultados que alguna ejecución en serie • Dos maneras de definir la equivalencia entre planificaciones: – Equivalencia por conflictos – Equivalencia de vistas Planificación serializable
  • 24. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 24 05/03/2022 • Si dos transacciones únicamente leen un determinado elemento de datos, no entran en conflicto entre sí y el orden de las operaciones no es importante • Si hay dos transacciones que leen o escriben elementos de datos independientes, no entran en conflicto entre sí y el orden de las operaciones no es importante • Si una de las transacciones escribe un elemento de datos y la otra lee o escribe el mismo elemento, entran en conflicto y el orden de las operaciones sí es importante Equivalencia por conflictos
  • 25. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 25 05/03/2022 • En una planificación, 2 operaciones están en conflicto si – pertenecen a diferentes transacciones, – tienen acceso al mismo elemento X, – y al menos una de ellas es escribir_elemento(X) Operaciones en conflicto en las planificaciones PC y PD: PC: l1(X) ; l2(X) ; e1(X) ; l1(Y) ; e2(X) ; c2 ; e1(Y) ; c1; PD: l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ; • Dos planes son equivalentes por conflictos si el orden de cualesquiera dos operaciones en conflicto es el mismo en ambos planes Equivalencia por conflictos
  • 26. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 26 05/03/2022 • Una planificación P es serializable por conflictos si equivale por conflictos a alguna planificación serie S Podremos intercambiar cada dos operaciones de P consecutivas de transacciones distintas y sin conflicto, hasta obtener la planificación serie equivalente PD : l1(X) ; e1(X) ; l2(X) ; e2(X) ; c2 ; l1(Y) ; e1(Y) ; c1 ; PD1: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; c2 ; e1(Y) ; c1 ; PD2: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c2 ; c1 ; PD3: l1(X) ; e1(X) ; l2(X) ; e2(X) ; l1(Y) ; e1(Y) ; c1 ; c2 ; PD4: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; e1(Y) ; c1 ; c2 ; PD5: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; e2(X) ; c1 ; c2 ; PD6: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e1(Y) ; c1 ; e2(X) ; c2 ; PD7: l1(X) ; e1(X) ; l1(Y) ; l2(X) ; e1(Y) ; c1 ; e2(X) ; c2 ; PD8: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; l2(X) ; c1 ; e2(X) ; c2 ; PD9: l1(X) ; e1(X) ; l1(Y) ; e1(Y) ; c1 ; l2(X) ; e2(X) ; c2 ; Planificación serializable por conflictos ¡Es una planificación serie! PD es serializable
  • 27. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 27 05/03/2022 • Construcción del grafo de precedencia (o de serialización) – Es un grafo dirigido G = ( N, A ) – N es un conjunto de nodos y A es un conjunto de aristas dirigidas – Algoritmo: ▪ Crear un nodo por cada transacción Ti en P ▪ Crear una arista Tj →Tk si Tk lee el valor de un elemento después de que Tj lo haya escrito ▪ Crear una arista Tj →Tk si Tk escribe el valor de un elemento después de que Tj lo haya leído ▪ Crear una arista Tj →Tk si Tk escribe el valor de un elemento después de que Tj lo haya escrito Ti Detección de la serializabilidad por conflictos Tj Tk
  • 28. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 28 05/03/2022 • Una arista Tj → Tk indica que Tj debe aparecer antes que Tk en una planificación serie equivalente a P, pues dos operaciones en conflicto aparecen en dicho orden en P • Si el grafo contiene un ciclo, P no es serializable por conflictos – Un ciclo es una secuencia de aristas C=((Tj →Tk), (Tk →Tp),... (Ti →Tj)) • Si no hay ciclos en el grafo, P es serializable Es posible obtener una planificación serie S equivalente a P, mediante una ordenación topológica de los nodos Detección de la serializabilidad por conflictos (y 2) T1 T2 PA T1 T2 PB T1 T2 PC T1 T2 PD
  • 29. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 29 05/03/2022 Planificación E Ejemplo de planificación no serializable Transacción T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); Transacción T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); Transacción T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); T1 T2 Y X T3 Y,Z Y Hay dos ciclos: T1→T2→T1 y T1→T2→T3→T1
  • 30. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 30 05/03/2022 Planificación F Ejemplo de planificación serializable Transacción T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); Transacción T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); Transacción T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); T1 leer_elemento(X); escribir_elemento(X); leer_elemento(Y); escribir_elemento(Y); T2 leer_elemento(Z); leer_elemento(Y); escribir_elemento(Y); leer_elemento(X); escribir_elemento(X); T3 leer_elemento(Y); leer_elemento(Z); escribir_elemento(Y); escribir_elemento(Z); T1 T2 X,Y T3 Y,Z Y La planificación serie equivalente es T3 → T1 → T2
  • 31. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 31 05/03/2022 Es el SO el que distribuye los recursos para los procesos, y determina la intercalación de las operaciones de las transacciones concurrentes (ejecutadas como procesos del SO) Planificación P (ordenamiento de las operaciones) • Carga del sistema • Momento de introducción de las transacciones • Prioridades de los procesos ... Planificador de Tareas del SO Aplicaciones de la serializabilidad Es necesario encontrar técnicas que garanticen la serializabilidad, sin tener que verificar a posteriori ¡¡enfoque muy poco práctico!! Parece, pues, que habría que comprobar si P es serializable una vez ejecutadas las transacciones incluidas en P... Ejecución de Transacciones NO SI OK Cancelar el efecto de P reintentar ¿P serializable?
  • 32. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 32 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 33. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 33 05/03/2022 • Métodos basados en la teoría de la serializabilidad, que definen un conjunto de reglas (o protocolo) tal que... – si todas las transacciones las cumplen, o – el subsistema de control de concurrencia del SGBD las impone (automáticamente) ... se asegura la serializabilidad de toda planificación de transacciones • Clasificación – Métodos de bloqueo – Métodos de marca de tiempo – Técnicas de multiversión – Métodos optimistas
  • 34. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 34 05/03/2022 • Uso de bloqueos para controlar el acceso concurrente a los elementos de datos almacenados en la base de datos • Reglas básicas del bloqueo: – Bloqueo compartido: si una transacción tiene un bloqueo compartido sobre un elemento de datos, puede leer el elemento, pero no actualizarlo (escribir) ▪ Varias transacciones pueden mantener a la vez bloqueos compartidos sobre el mismo elemento – Bloqueo exclusivo: si una transacción tiene un bloqueo exclusivo sobre un elemento de datos, puede leer y actualizar (escribir) el elemento ▪ Un bloqueo exclusivo proporciona acceso exclusivo al elemento Métodos de bloqueo
  • 35. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 35 05/03/2022 Reglas de uso de los bloqueos 1. T debe emitir bloquear_lectura(X) o bloquear_escritura(X) antes de ejecutar una operación leer_elemento(X) 2. T debe emitir bloquear_escritura(X) antes de realizar una operación escribir_elemento(X) en T 3. T debe emitir desbloquear(X) una vez completadas todas las operaciones leer_elemento(X) y escribir_elemento(X) 4. Si T ya posee un bloqueo, compartido o exclusivo, sobre X no emitirá bloquear_lectura(X) ni bloquear_escritura(X) *esta regla puede permitir excepciones: mejora y reducción de bloqueos* 5. T no emitirá desbloquear(X) salvo si posee un bloqueo, compartido o exclusivo, sobre X Métodos de bloqueo
  • 36. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 36 05/03/2022 • Cuando una transacción T solicita un bloqueo… – Si el elemento no ha sido ya bloqueado por otra transacción, se le concede el bloqueo – Si el elemento sí está bloqueado, el SGBD determina si la solicitud es compatible con el bloqueo existente: ▪ Si se pide un bloqueo compartido sobre un elemento que ya tiene un bloqueo compartido, el bloqueo será concedido a T ▪ En otro caso, T debe esperar hasta que se libere el bloqueo existente • Una transacción que obtiene un bloqueo lo mantiene hasta que lo libera explícitamente o termina (commit o rollback) – Sólo cuando se libera un bloqueo exclusivo los efectos de la escritura serán visibles para las demás transacciones Métodos de bloqueo
  • 37. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 37 05/03/2022 • Algunos sistemas permiten la mejora (o promoción) y la reducción (o degradación) de bloqueos – Aumenta el nivel de concurrencia del sistema • Si T emitió bloquear_lectura(X), más tarde puede mejorarlo a bloqueo exclusivo emitiendo bloquear_escritura(X) – Si T es la única que tiene un bloqueo compartido sobre X, se le concede la solicitud – En otro caso, T debe esperar • Si T emitió bloquear_escritura(X), más tarde puede reducirlo a un bloqueo compartido emitiendo bloquear_lectura(X) – Así permite que otras transacciones lean X Métodos de bloqueo
  • 38. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 38 05/03/2022 • El uso de bloqueos para la programación de transacciones no garantiza la serializabilidad de las planificaciones Métodos de bloqueo Planificación G T4 bloquear_lectura(Y); leer_elemento(Y); desbloquear(Y); bloquear_escritura(X); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); T5 bloquear_lectura(X); leer_elemento(X); desbloquear(X); bloquear_escritura(Y); leer_elemento(Y); Y:=X+Y; escribir_elemento(Y); desbloquear(Y); Transacción T4 bloquear_lectura(Y); leer_elemento(Y); desbloquear(Y); bloquear_escritura(X); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); Transacción T5 bloquear_lectura(X); leer_elemento(X); desbloquear(X); bloquear_escritura(Y); leer_elemento(Y); Y:=X+Y; escribir_elemento(Y); desbloquear(Y); Valores iniciales: X=20, Y=30 Resultados de las planificaciones serie: T4→T5: X=50, Y=80 T5→T4: X=70, Y=50 Resultado de la planificación G: X=50, Y=50 (No serializable!)
  • 39. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 39 05/03/2022 Es necesario seguir un protocolo adicional que indique dónde colocar las operaciones de bloqueo y desbloqueo dentro de las transacciones • El más conocido es el Bloqueo en Dos Fases (B2F) • Una transacción T sigue el protocolo de bloqueo en dos fases si todas las operaciones de bloqueo preceden a la primera operación de desbloqueo De este modo, podemos ver T dividida en dos fases: – Fase de expansión (o crecimiento) ▪ T puede adquirir bloqueos ▪ T no puede liberar ningún bloqueo – Fase de contracción ▪ T puede liberar bloqueos existentes ▪ T no puede adquirir ningún bloqueo Métodos de bloqueo: Bloqueo en dos fases
  • 40. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 40 05/03/2022 • Si el sistema permite mejorar y reducir bloqueos… – La mejora sólo puede tener lugar en la fase de expansión – La reducción sólo puede realizarse en la fase de contracción En el código de T, un bloquear_lectura(X) puede aparecer en la fase de contracción de T sólo si reduce un bloqueo exclusivo a uno compartido Bloqueo en dos fases Transacción T4’ bloquear_lectura(Y); leer_elemento(Y); bloquear_escritura(X); desbloquear(Y); leer_elemento(X); X:=X+Y; escribir_elemento(X); desbloquear(X); Transacción T5’ bloquear_lectura(X); leer_elemento(X); bloquear_escritura(Y); desbloquear(X); leer_elemento(Y); Y:=X+Y; escribir_elemento(Y); desbloquear(Y);
  • 41. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 41 05/03/2022 • Si toda transacción de una planificación sigue el protocolo de bloqueo en dos fases, entonces la planificación es serializable • Ventaja – Ya no es necesario comprobar la serializabilidad de las planificaciones • Inconvenientes – El B2F puede limitar el grado de concurrencia en un plan – Emplear bloqueos puede provocar problemas de ... ▪ Interbloqueo (bloqueo mortal o abrazo mortal) ▪ Bloqueo indefinido (o espera indefinida) Bloqueo en dos fases
  • 42. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 42 05/03/2022 • T debe bloquear todos los elementos a los que tendrá acceso (lectura o escritura) antes de comenzar a ejecutarse – Si no es posible bloquear algún elemento, T no bloqueará ninguno y esperará para reintentarlo más tarde – Protocolo libre de interbloqueo Bloqueo en dos fases conservador o estático Bloqueo en dos fases estricto el más utilizado • T no libera ningún bloqueo exclusivo hasta terminar (con COMMIT o ROLLBACK) – Ninguna transacción lee o escribe un elemento modificado por T, salvo si T se ha completadoplanificación estricta – Puede sufrir interbloqueo (salvo si se combina con B2F conservador) Bloqueo en dos fases riguroso más restrictivo que el B2F estricto • T no libera ningún bloqueo compartido ni exclusivo hasta terminar (con COMMIT o ROLLBACK) planificación estricta
  • 43. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 43 05/03/2022 • Situación en la que cada una de dos (o más) transacciones está esperando a que se libere un bloqueo establecido por la otra transacción El problema del interbloqueo T6 bloquear_escritura(X); leer_elemento(X); X:=X-10; escribir_elemento(X); bloquear_escritura(Y); [… en espera …] T7 bloquear_escritura(Y); leer_elemento(Y); Y:=Y+100; escribir_elemento(Y); bloquear_escritura(Y); [… en espera …] • El SGBD ha de reconocer un interbloqueo y romperlo: – Abortar una o más transacciones ▪ Se deshacen sus escrituras y se liberan sus bloqueos Así, el resto de transacciones podrá continuar su ejecución – Reiniciar automáticamente las transacciones abortadas
  • 44. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 44 05/03/2022 • Hay 3 técnicas generales para gestionar los interbloqueos – Temporizaciones de bloqueos – Prevención de interbloqueos – Detección de interbloqueos • Conviene detectar interbloqueos cuando se sabe que hay poca interferencia entre transacciones, es decir si... – Las transacciones son cortas y bloquean pocos elementos, o – La carga de transacciones es pequeña • En otro caso, conviene usar temporizaciones o técnicas de prevención Es más difícil prevenir que utilizar temporizaciones o que detectarlos y romperlos, por lo que en la práctica los sistemas no suelen emplear las técnicas de prevención El problema del interbloqueo
  • 45. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 45 05/03/2022 • Una transacción que solicita un bloqueo sólo esperará durante un período de tiempo predefinido por el sistema • Si no se concede el bloqueo durante ese tiempo, se producirá un ‘fin de temporización’: el SGBD asumirá que la transacción está interbloqueada (aunque puede que no), la abortará y la reiniciará automáticamente Es una solución muy sencilla y práctica Pero puede hacer que sean abortadas y reiniciadas transacciones que en realidad no están en un interbloqueo Temporizaciones de bloqueos
  • 46. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 46 05/03/2022 • Ordenar las transacciones usando marcas temporales de transacción MT(T): ▪ Identificador único para T ▪ Las MT se ordenan según se inician las transacciones ▪ La T más antigua tiene la MT(T) menor Sea Tj que intenta bloquear el elemento de datos X , pero X ya está bloqueado por Tk con un candado en conflicto • Algoritmo Esperar - Morir si MT(Tj) < MT(Tk) entonces Tj puede esperar si no, se aborta Tj (Tj muere) y se reinicia después con la misma marca de tiempo  Una Tj más antigua espera a que termine otra Tk más reciente  Una Tj más reciente que solicita un elemento bloqueado por una Tk más antigua, es abortada (muere) y reiniciada Prevención de interbloqueos
  • 47. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 47 05/03/2022 • Algoritmo Herir - Esperar si MT(Tj) < MT(Tk) entonces se aborta Tk (Tj hiere a Tk) y se reinicia después con la misma MT si no, Tj puede esperar  Una Tj más reciente espera a que termine una Tk más antigua  Una Tj más antigua que solicita un elemento bloqueado por una Tk más reciente, hace que la más reciente sea abortada (es herida) y reiniciada • Inconvenientes – Ambos algoritmos hacen que sean abortadas y reiniciadas transacciones que podrían provocar un bloqueo mortal, aunque tal cosa nunca ocurriera! – En el algoritmo Esperar-Morir, una Tj podría abortar y reiniciarse varias veces seguidas si Tk más antigua sigue bloqueando el X que Tj solicita Prevención de interbloqueos
  • 48. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 48 05/03/2022 • Verificación periódica del estado del sistema ¿está en un bloqueo mortal? • Creación de un grafo de espera que muestra las dependencias entre transacciones – Crear un nodo por cada transacción en ejecución, etiquetado con el identificador de la transacción, T – Si Tj espera para bloquear el elemento X, ya bloqueado por Tk, crear una arista dirigida desde Tj a Tk – Cuando Tk libera el candado sobre X, borrar la arista correspondiente • Si existe un ciclo en el grafo de espera, entonces se ha detectado un interbloqueo entre las transacciones Detección de interbloqueos Tj Tk X Tj Tk
  • 49. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 49 05/03/2022 • Pero... ¿cuándo hay que verificar el estado del sistema (ejecutar el algoritmo que genera el grafo de espera)? – A intervalos uniformes de tiempo, o – A intervalos de tiempo desiguales : ▪ Iniciar algoritmo de detección con un tamaño de intervalo inicial ▪ Cada vez que no se detecta interbloqueo, incrementar el intervalo – Por ejemplo, al doble del anterior ▪ Cada vez que se detecta interbloqueo, reducir el intervalo – Por ejemplo a la mitad ▪ Existirán límites superior e inferior del tamaño del intervalo Detección de interbloqueos
  • 50. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 50 05/03/2022 • Si el sistema está en un estado de interbloqueo, el SGBD necesita abortar algunas transacciones... • ¿Cuáles?  Selección de víctimas – Es mejor abortar transacciones que lleven poco tiempo en ejecución – Es mejor abortar una transacción que haya hecho pocos cambios en la base de datos – Es mejor abortar una transacción que todavía debe hacer muchos cambios en la base de datos ▪ Puede que el SGBD no conozca esta información Se trata de abortar las transacciones que supongan el mínimo coste • Es necesario evitar la inanición Detección de interbloqueos
  • 51. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 51 05/03/2022 • Una transacción sufre inanición cuando es seleccionada para ser abortada (víctima) sucesivamente: nunca termina su ejecución – Es similar al bloqueo indefinido • La solución es asignar prioridades más altas a las transacciones abortadas varias veces, para no ser siempre las víctimas Detección de interbloqueos: el problema de la inanición
  • 52. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 52 05/03/2022 • El protocolo de control de concurrencia nunca selecciona a una transacción que está esperando para establecer un bloqueo, mientras otras transacciones continúan ejecutándose con normalidad – Ocurre si el esquema de espera da más prioridad a unas transacciones que a otras  esquema de espera injusto • Dos algoritmos de prevención de bloqueo indefinido – Consiguen un esquema de espera justo ▪ El primero que llega, es el primero en ser atendido • Las transacciones puede bloquear el elemento X en el orden en que solicitaron su bloqueo ▪ Aumento de prioridad en la espera • Cuanto más espera T, mayor es su prioridad • Cuando T tiene la prioridad más alta de todas, obtiene el bloqueo y continúa su ejecución El problema del bloqueo indefinido
  • 53. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 53 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 54. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 54 05/03/2022 • Toda técnica de control de concurrencia supone que la base de datos está constituida por un conjunto de elementos de datos con nombre • Normalmente, un elemento de datos será uno de estos: – un valor de campo de un registro de la BD – un registro de la BD – una página (uno o varios bloques de disco) – un fichero – la BD completa • Granularidad = tamaño del elemento de información – Granularidad fina  elementos de tamaño pequeño – Granularidad gruesa elementos grandes Elementos de bases de datos y granularidad
  • 55. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 55 05/03/2022 • En el contexto de los métodos de bloqueo, el tamaño del elemento de datos afecta al grado de concurrencia:  tamaño(elemento)   Grado de concurrencia Y también...   número de elementos en la BD   carga de trabajo para la gestión de bloqueos, y   espacio ocupado por la información de bloqueo • Pero... ¿Cuál es el tamaño adecuado para los elementos? Pues depende de la naturaleza de las transacciones: – Si una T representativa accede a pocos registros ▪ elegir granularidad de registro – Si T accede a muchos registros de un mismo fichero ▪ elegir granularidad de página o de fichero Elección del tamaño adecuado del elemento de datos
  • 56. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 56 05/03/2022 NIVEL DE ABSTRACCIÓN LÓGICO O CONCEPTUAL: • Definición del nivel de aislamiento de cada transacción (por parte del usuario o, por omisión, el propio SGBD) • Control explícito de bloqueos (operación LOCK) por parte del usuario, si se permiten niveles de aislamiento inferiores a SERIALIZABLE NIVEL DE ABSTRACCIÓN FÍSICO O INTERNO: • El SGBD implementa los niveles de aislamiento definidos por el usuario para las transacciones siguiendo una o varias técnicas o protocolos • Por ejemplo el SGBD Oracle usa dos: – Bloqueos – Multiversión Estos conceptos se tratan en el anexo de este tema Estos conceptos se han estudiado en la teoría de este tema Aclaración ...
  • 57. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 57 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 58. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 58 05/03/2022 Niveles de aislamiento en MySQL ▪ Para evitar que sucedan los problemas de acceso concurrente que hemos comentado en el punto inicial de esta unidad, podemos establecer diferentes niveles de aislamiento que controlan el nivel de bloqueo durante el acceso a los datos. El estándar ANSI/ISO de SQL (SQL92) define cuatro niveles de aislamiento. • Read Uncommitted. En este nivel no se realiza ningún bloqueo, por lo tanto, permite que sucedan los tres problemas • Read Committed. En este caso los datos leídos por una transacción pueden ser modificados por otras transacciones, por lo tanto, se pueden dar los problemas Non-Repeteable Read y Phantom Read. • Repeatable Read. En este nivel ningún registro leído con un SELECT puede ser modificado en otra transacción, por lo tanto, sólo puede suceder el problema del Phantom Read. • Serializable. En este caso las transacciones se ejecutan unas detrás de otras, sin que exista la posibilidad de concurencia. ▪ El nivel de aislamiento que utiliza InnoDB por defecto es Repeatable Read.
  • 59. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 59 05/03/2022 Niveles de aislamiento en MySQL ▪ La siguiente tabla muestra los problemas de lectura que pueden ocurrir en cada uno de los modos de aislamiento. Nivel Dirty Read (Lectura sucia) Non-Repeatable Read (Lectura No Repetible) Phantom Read (Lectura fantasma) Read Uncommitted Es posible Es posible Es posible Read Committed - Es posible Es posible Repeatable Read - - Es posible Serializable - - -
  • 60. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 60 05/03/2022 Niveles de aislamiento en MySQL ▪ Podemos consultar el nivel de aislamiento que estamos utilizando, consultando el contenido de la variable global y de sesión @@transaction_isolation. ▪ También podemos consultar el contenido de la variable de sesión sin utilizar la palabra reservada SESSION. -- Variable global SELECT @@GLOBAL.transaction_isolation; -- Variable de sesión SELECT @@SESSION.transaction_isolation; SELECT @@transaction_isolation;
  • 61. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 61 05/03/2022 Ejemplo 1: Evaluación de los niveles de aislamiento ante el problema Dirty Read. ▪ En este ejemplo vamos a simular que hay dos usuarios que quieren acceder de forma concurrente a los mismos datos de una tabla. ▪ Para simular los dos usuarios vamos a iniciar dos terminales para conectarnos a un servidor MySQL. ▪ Desde el terminal A vamos a ejecutar las siguientes sentencias SQL:
  • 62. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 62 05/03/2022 DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE cuentas ( id INTEGER UNSIGNED PRIMARY KEY, saldo DECIMAL(11,2) CHECK (saldo >= 0) ); INSERT INTO cuentas VALUES (1, 1000); INSERT INTO cuentas VALUES (2, 2000); INSERT INTO cuentas VALUES (3, 0); -- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas START TRANSACTION; UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
  • 63. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 63 05/03/2022 Ahora desde el terminal B ejecute las siguientes sentencias SQL: -- 1. Seleccionamos la base de datos USE test; -- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 3. Iniciamos una transacción y observamos los datos que existen en la tabla cuentas START TRANSACTION; SELECT * FROM cuentas WHERE id = 1; Ahora ejecute ROLLBACK en el terminal A para finalizar la transacción que estaba sin finalizar. -- 3. Deshacemos las operaciones realizadas en la transacción ROLLBACK; Desde el terminal B vuelva a ejecutar esta sentencia: -- 4. Observamos los datos que existen en la tabla cuentas SELECT * FROM cuentas WHERE id = 1;
  • 64. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 64 05/03/2022 Ejemplo 1: Evaluación de los niveles de aislamiento ante el problema Dirty Read. ▪ ¿Qué es lo que ha sucedido? Repita el ejercicio utilizando los otros niveles de aislamiento (READ COMMITTED, REPEATABLE READ y SERIALIZABLE). Tendrá que configurar el nivel de aislamiento que va a utilizar durante la sesión con las siguientes sentencias: • SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; • SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; • SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  • 65. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 65 05/03/2022 Ejemplo 2: Evaluación de los niveles de aislamiento ante el problema Non-Repeatable Read. ▪ En este ejemplo vamos a simular que hay dos usuarios que quieren acceder de forma concurrente a los mismos datos de una tabla. Para simular los dos usuarios vamos a iniciar dos terminales para conectarnos a un servidor MySQL. ▪ Desde el terminal A vamos a ejecutar las siguientes sentencias SQL:
  • 66. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 66 05/03/2022 DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE cuentas ( id INTEGER UNSIGNED PRIMARY KEY, saldo DECIMAL(11,2) CHECK (saldo >= 0) ); INSERT INTO cuentas VALUES (1, 1000); INSERT INTO cuentas VALUES (2, 2000); INSERT INTO cuentas VALUES (3, 0); -- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas START TRANSACTION; SELECT * FROM cuentas WHERE id = 1; NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
  • 67. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 67 05/03/2022 Ahora desde el terminal B ejecute las siguientes sentencias SQL: Ahora volvemos a ejecutar en el terminal A la misma consulta que ejecutamos al inicio de la transacción. -- 1. Seleccionamos la base de datos USE test; -- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 3. Iniciamos una transacción y atualizamos los datos de la tabla cuentas START TRANSACTION; UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; -- 4. Finalizamos la transacción con COMMIT COMMIT; -- 4. Volvemos a ejecutar la misma sentencia para observar los datos que existen en la tabla cuentas SELECT saldo FROM cuentas WHERE id = 1;
  • 68. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 68 05/03/2022 Ejemplo 2: Evaluación de los niveles de aislamiento ante el problema Non-Repeatable Read. ▪ ¿Qué es lo que ha sucedido? Repita el ejercicio utilizando los otros niveles de aislamiento (READ COMMITTED, REPEATABLE READ y SERIALIZABLE). Tendrá que configurar el nivel de aislamiento que va a utilizar durante la sesión con las siguientes sentencias: • SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; • SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; • SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  • 69. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 69 05/03/2022 Ejemplo 3: Evaluación de los niveles de aislamiento ante el problema Phantom Read. ▪ En este ejemplo vamos a simular que hay dos usuarios que quieren acceder de forma concurrente a los mismos datos de una tabla. Para simular los dos usuarios vamos a iniciar dos terminales para conectarnos a un servidor MySQL. ▪ Desde el terminal A vamos a ejecutar las siguientes sentencias SQL:
  • 70. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 70 05/03/2022 DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE cuentas ( id INTEGER UNSIGNED PRIMARY KEY, saldo DECIMAL(11,2) CHECK (saldo >= 0) ); INSERT INTO cuentas VALUES (1, 1000); INSERT INTO cuentas VALUES (2, 2000); INSERT INTO cuentas VALUES (3, 0); -- 1. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 2. Ejecutamos una transacción para transfereir dinero entre dos cuentas START TRANSACTION; SELECT SUM(saldo) FROM cuentas; NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
  • 71. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 71 05/03/2022 Ahora desde el terminal B ejecute las siguientes sentencias SQL: Ahora volvemos a ejecutar en el terminal A la misma consulta que ejecutamos al inicio de la transacción. -- 1. Seleccionamos la base de datos USE test; -- 2. Configuramos que en esta sesión vamos a utilizar el nivel de aislamiento READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 3. Iniciamos una transacción y atualizamos los datos de la tabla cuentas START TRANSACTION; INSERT INTO cuentas VALUES (4, 3000); -- 4. Finalizamos la transacción con COMMIT COMMIT; -- 4. Volvemos a ejecutar la misma sentencia para observar los datos que existen en la tabla cuentas SELECT SUM(saldo) FROM cuentas;
  • 72. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 72 05/03/2022 Contenido ▪ Introducción y problemas de la concurrencia ▪ Serializabilidad ▪ Técnicas de control de la concurrencia ▪ Granularidad de datos ▪ Niveles de aislamiento en MySQL ▪ Políticas de bloqueo en MySQL
  • 73. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 73 05/03/2022 Políticas de bloqueo en MySQL ▪ Cuando una transacción accede a los datos lo hace de forma exclusiva, de modo que una transacción no podrá acceder a los datos que están siendo utilizados por una transacción hasta que ésta haya terminado. ▪ El bloqueo de los datos se puede realizar a nivel de: • Base de datos. • Tabla. • Fila. • Columna. ▪ InnoDB realiza por defecto un bloqueo a nivel de fila.
  • 74. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 74 05/03/2022 DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE cuentas ( id INTEGER UNSIGNED PRIMARY KEY, saldo DECIMAL(11,2) CHECK (saldo >= 0) ); INSERT INTO cuentas VALUES (1, 1000); INSERT INTO cuentas VALUES (2, 2000); INSERT INTO cuentas VALUES (3, 0); -- 1. Ejecutamos una transacción para transfereir dinero entre dos cuentas START TRANSACTION; UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; En este ejemplo vamos a simular que hay dos usuarios que quieren acceder de forma concurrente a los mismos datos de una tabla. Para simular los dos usuarios vamos a iniciar dos terminales para conectarnos a un servidor MySQL. Desde el terminal A vamos a ejecutar las siguientes sentencias SQL: NOTA: Observe que la transacción que estamos ejecutando en el terminal A todavía no ha finalizado, porque no hemos ejecutado COMMIT ni ROLLBACK.
  • 75. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 75 05/03/2022 Ahora desde el terminal B ejecute las siguientes sentencias SQL: -- 1. Seleccionamos la base de datos USE test; -- 2. Observamos los datos que existen en la tabla cuentas SELECT * FROM cuentas; -- 3. Intentamos actualizar el saldo de una de las cuentas que está siendo utilizada en la transacción del terminal A UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; ¿Qué es lo que ha ocurrido en el terminal B? ¿Puedo acceder a los datos para consultaros? ¿Y para modificarlos? ¿Puedo modificar desde el terminal B una cuenta bancaria que no esté siendo utilizada por la transacción del terminal A? Ahora ejecute COMMIT en el terminal A para finalizar la transacción que estaba sin finalizar. ¿Qué es lo que ha sucedido?
  • 76. Bases de Datos Carrera de Software Ph.D. Franklin Parrales 76 05/03/2022 Concurrencia Unidad 9 Final de la unidad Y del curso…. !Muchas gracias a todos!