Professional Documents
Culture Documents
MONITOREO DE TRANSACCIONES
spid
dbid
ObjId
52
53
6
13
53
13
53
13
53
54
55
56
57
58
60
61
62
63
64
65
65
13
12
6
6
6
13
6
6
6
7
6
13
13
65
13
65
13
65
66
13
7
0
0
45357665
4
45357665
4
45357665
4
0
0
0
0
0
0
0
0
0
0
0
41
45357665
4
45357665
4
45357665
4
0
IndId
Type
0 DB
0 DB
1 KEY
1 PAG
0
0
0
0
0
0
0
0
0
0
0
0
0
TAB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
TAB
Resource
Mode
S
S
(8194443
284a0)
S
0.240277
78 IS
IS
S
S
S
S
S
S
S
S
S
S
S
IX
1 KEY
0.240277
78 IX
(f1de2a2
05d4a)
X
0 TAB
0 DB
IX
S
1 PAG
Status
GRANT
GRANT
WAIT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
67
13
67
13
67
13
67
13
67
13
69
13
69
13
69
69
13
13
70
70
13
13
70
13
70
13
71
13
71
13
71
71
13
13
72
72
13
13
72
13
72
13
73
13
73
73
13
13
73
13
74
74
13
13
74
13
74
13
74
13
74
13
74
13
0
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
0
45357665
4
0
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
0
45357665
4
0
45357665
4
45357665
4
45357665
4
45357665
4
0
45357665
4
45357665
4
0
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
0 DB
GRANT
1 KEY
S
(f1de2a2
05d4a)
U
0.240277
78 IX
(f07ed88
b2b23)
X
0 TAB
IX
GRANT
0 TAB
GRANT
1 KEY
IX
0.240277
78 IU
(f1de2a2
05d4a)
U
S
0.240277
78 IU
S
(f1de2a2
05d4a)
U
0 TAB
IX
GRANT
0 TAB
IX
(f1de2a2
05d4a)
U
0.240277
78 IU
S
0.240277
78 IU
S
(f1de2a2
05d4a)
U
GRANT
GRANT
1 PAG
0 DB
IX
(f1de2a2
05d4a)
U
0.240277
78 IU
S
0 TAB
IX
GRANT
0 TAB
0 DB
IX
S
GRANT
GRANT
GRANT
IX
GRANT
GRANT
WAIT
GRANT
1 KEY
1 PAG
1 PAG
1 KEY
0 DB
1 PAG
0 DB
1 KEY
1 PAG
0 DB
1 PAG
0 DB
1 KEY
0 TAB
1 KEY
1 KEY
1 PAG
1 KEY
1 KEY
1 KEY
(8194443
284a0)
0.240277
78
(b9b173b
be8d5)
(f1de2a2
05d4a)
(c9fb1da9
313f)
WAIT
GRANT
GRANT
GRANT
WAIT
GRANT
GRANT
GRANT
WAIT
WAIT
GRANT
GRANT
GRANT
GRANT
WAIT
WAIT
GRANT
GRANT
74
13
74
13
74
13
74
13
74
13
74
13
74
13
74
13
74
13
74
13
74
13
75
13
75
13
75
75
13
13
76
76
13
13
76
13
76
13
78
78
78
32767
13
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
45357665
4
0
45357665
4
0
45357665
4
45357665
4
14671522
72
57120465
6
0
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
1 KEY
0 TAB
(98ec012
aa510)
(a0c936a
3c965)
(e8a66f3
87cfa)
(d08358b
1108f)
(40fd182
c0dd9)
(30b7763
ed433)
(089241b
7b846)
(59855d3
42c69)
(61a06ab
d401c)
(29cf332
6f583)
(11ea04a
f99f6)
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
1 PAG
IX
(8194443
284a0)
U
0.240277
78 IU
S
(8194443
284a0)
S
S
0.240277
78 IS
0 TAB
IS
GRANT
0 TAB
IS
GRANT
0 TAB
0 DB
Sch-S
S
GRANT
GRANT
1 KEY
1 PAG
0 DB
1 KEY
0 DB
WAIT
GRANT
GRANT
WAIT
GRANT
GRANT
Conceptos bsicos
Transaccin
Propiedades ACID
Atomicidad
Es la propiedad de las transacciones que permite observarlas como operaciones atmicas:
ocurren totalmente o no ocurren.
Casos a considerar:
- Consultas unitarias. Incluso para consultas unitarias hay que preservar la atomicidad: en un
sistema operativo de tiempo compartido, la ejecucin concurrente de dos consultas SQL puede
ser incorrecta si no se toman las precauciones adecuadas.
- Operacin abortada. Por ejemplo, debido a una divisin por cero; por privilegios de acceso; o
para evitar bloqueos
Consistencia
La ejecucin aislada de la transaccin conserva la consistencia de la base de datos.
Aislamiento
Para cada par de transacciones que puedan ejecutarse concurrentemente Ti y Tj, se cumple que
para los efectos de Ti:
- Tj ha terminado antes de que comience Ti
- Tj ha comenzado despus de que termine Ti
Las transacciones son independientes entre s.
Niveles de aislamiento
Se puede ajustar el nivel de aislamiento entre las transacciones y determinar para una
transaccin el grado de aceptacin de datos inconsistentes.
A mayor grado de aislamiento, mayor precisin, pero a costa de menor concurrencia.
El nivel de aislamiento para una sesin SQL establece el comportamiento de los bloqueos para
las instrucciones SQL.
Niveles de aislamiento:
Lectura no comprometida. Menor nivel. Asegura que no se lean datos corruptos fsicamente.
Lectura comprometida. Slo se permiten lecturas de datos comprometidos.
Lectura repetible. Las lecturas repetidas de la misma fila para la misma transaccin dan los
mismos resultados.
Secuenciable. Mayor nivel de aislamiento. Las transacciones se aslan completamente.
Comportamiento concurrente de las transacciones.
Lectura sucia. Lectura de datos no comprometidos. (Retrocesos)
Lectura no repetible. Se obtienen resultados inconsistentes en lecturas repetidas.
Lectura fantasma. Una lectura de una fila que no exista cuando se inici la transaccin.
Comportamiento permitido
Nivel de aislamiento
Lectura
Lectura no
Lectura fantasma
repetible
Lectura no comprometida
Ssucia
S
S
Lectura comprometida
No
S
S
Lectura repetible
No
No
S
Secuenciable
No
No
No
SQL Server permite todos estos niveles, Oracle slo permite la lectura comprometida y
secuenciable. Los niveles se pueden establecer en ambos SGBD para cada transaccin.
Durabilidad
El sistema gestor de bases de datos asegura que perduren los cambios realizados por una
transaccin que termina con xito.
Activa
Fallida
Abortada
Programacin de transacciones
Tipos de transacciones: implcitas (modo de autocompromiso) y explcitas (delimitadas).
Transacciones explcitas:
Oracle
SQL Server
BEGIN TRAN[SACTION]
Instruccin 1
Instruccin 1
...
...
SAVEPOINT sp
SAVE TRAN[SACTION] sp
...
...
ROLLBACK [TO SAVEPOINT sp]
ROLLBACK [TRAN[SACTION] sp]
...
...
Instruccin n
Instruccin n
COMMIT [WORK]
COMMIT [TRAN[SACTION]]
Ejemplo (SQL Server):
Incremento de un 1% de las comisiones 15% y 16% de la tabla de comisiones roysched. Si no
existen estos porcentajes entonces no se ejecutar la instruccin de actualizacin. En este
ejemplo se deben incrementar ambos; si uno de ellos no existe, se debe dejar sin modificar.
Transacciones anidadas
Una transaccin anidada o multinivel T consiste en un conjunto T = {t1, t2, . . ., tn} de
subtransacciones y en un orden parcial P sobre T.
Cada ti de T puede abortar sin obligar a que T aborte. Puede que T reinicie ti o simplemente no
ejecute ti. Si se compromete ti, esa accin no hace que ti sea permanente, sino que ti se
compromete con T, y puede que aborte si T aborta. La ejecucin de T no debe violar el orden
parcial P. Es decir, si aparece un arco ti tj en el grafo de precedencia, tj ti no debe estar en el
cierre transitivo de P.
Ejemplo (SQL Server):
USE MyDB
GO
CREATE PROCEDURE Formular_pedido AS --Crea un procedimiento almacenado
BEGIN TRAN Tran_formular_pedido
-- Instrucciones SQL para la formulacin del pedido
COMMIT TRAN Tran_formular_pedido
GO
BEGIN TRAN Tran_pedidos
-- Formular un pedido
EXEC Formular_pedido
COMMIT TRAN Tran_pedidos
GO
Elementos
Los elementos son las unidades de datos para los que se controla el acceso.
Por ejemplo: relacin, tupla, campos, bloques, ...
La granularidad es el tamao de los elementos. As, se habla de sistemas de grano fino o de
grano grueso, para denotar elementos pequeos o grandes, respectivamente.
A mayor granularidad, menor concurrencia.
Bloqueos
Un bloqueo es una informacin del tipo de acceso que se permite a un elemento. El SGBD
impone los bloqueos necesarios en cada momento. El gestor de acceso a los datos implementa las
restricciones de acceso. En algunos sistemas se permite que el usuario pueda indicar el bloqueo
ms adecuado (locking hints).
Tipos de bloqueo con respecto a la operacin:
read-locks: slo permite lectura
write-locks: permite lectura y escritura
El gestor de bloqueos almacena los bloqueos en una tabla de bloqueos:
(<elemento>, <tipo de bloqueo>, <transaccin>)=(E,B,T)
La transaccin T tiene un tipo de bloqueo B sobre el elemento E.
Normalmente, E es clave, aunque no siempre, porque varias transacciones pueden bloquear el
mismo elemento de forma diferente.
Niveles de bloqueo
Especifica la granularidad del bloqueo
Fila: Fila individual
Clave: Fila de un ndice
Pgina: Pginas (8KB)
Extent: Extensin (grupo de 8 pginas contiguas de datos o ndices)
Table: Tabla completa
Database: Base de datos completa
Modos de bloqueo
Especifica el modo en que se bloquea un elemento
Compartido: para operaciones slo de lectura. Se permiten lecturas concurrentes, pero
ninguna actualizacin.
Actualizacin: para operaciones que pueden escribir. Slo se permite que una transaccin
adquiera este bloqueo. Si la transaccin modifica datos, se convierte en exclusivo, en caso
contrario en compartido.
Exclusivo. para operaciones que escriben datos. Slo se permite que una transaccin
adquiera este bloqueo.
Intencin: se usan para establecer una jerarqua de bloqueo. Por ejemplo, si una transaccin
necesita bloqueo exclusivo y varias transacciones tienen bloqueo de intencin, no se
concede el exclusivo.
Intencin compartido. Bloqueo compartido.
Intencin exclusivo. Bloqueo exclusivo.
Compartido con intencin exclusivo. Algunos bloqueos compartidos y otros exclusivos.
Esquema. para operaciones del DDL.
Actualizacin masiva. En operaciones de actualizacin masiva
Control de concurrencia
P: READ A; A:=A+1; WRITE A;
A en la
5
5
5
5
BD
T1
READ A
A:=A+1
T2
READ A
A:=A+1
A en T1
5
5
6
6
A en T2
5
5
6
P: LOCK A; READ A; A:=A+1; WRITE A; UNLOCK A;
A en la
BD
6
WRITE A
WRITE A
6
6
6
6
7
Livelock
Espera indefinida de una transaccin por un bloqueo que no se llega a conceder porque se cede
a otras transacciones.
Una solucin (sistemas operativos): estrategia first-come-first-served (se atiende al primero que
llega).
Deadlock
T1: LOCK A; LOCK B; UNLOCK A; UNLOCK B;
T2: LOCK B; LOCK A; UNLOCK B; UNLOCK A;
T1 y T2 bloquean A y B => Espera indefinida de T1 y T2.
Soluciones (sistemas operativos):
1- Concesin simultnea de todos los bloqueos de una transaccin.
2- Asignar un orden lineal arbitrario a los elementos y requerir que las transacciones pidan los
bloqueos en este orden.
3- Permitir los deadlocks y analizar cada cierto tiempo si existen.
Secuencialidad de planificaciones
La ejecucin concurrente de varias transacciones es correcta <=> su efecto es el mismo si se
ejecutan secuencialmente en cualquier orden.
Una planificacin para un conjunto de transacciones es el orden en el que se realizan los pasos
elementales de las transacciones.
Una planificacin es secuencial si todos los pasos de cada transaccin ocurren
consecutivamente.
Una planificacin es secuenciable si su efecto es equivalente al de la planificacin secuencial.
Ej: Se transfieren 10 unidades de A a B y 20 de B a C.
T1: READ A; A:=A-10; WRITE A; READ B; B:=B+10;WRITE B;
T2: READ B; B:=B-20; WRITE B; READ C; C=C+20; WRITE C;
Cualquier planificacin secuencial preserva A+B+C (Slo hay dos, T1 antes de T2 o viceversa)
T
T
T
T
T
T
2
2
2
READ1 A
READ1 A
READ1 A
A:=A-10
READ B
A:=A-10
WRITE A
A:=A-10
READ B
READ B
B:=B-20
WRITE A
B:=B+10
WRITE A
B:=B-20
WRITE B
WRITE B
READ B
READ B
READ B
WRITE B
B:=B-20
READ C
B:=B+10
WRITE B
B:=B+10
READ C
READ C
C=C+20
WRITE B
C=C+20
WRITE B
C=C+20
WRITE C
WRITE C
WRITE C
Planificacin secuencial
Planificacin
Planificacin
no
secuenciable
(B
se
secuenciable pero no
incrementa en 10 unidades
secuencial
en lugar de decrementarse;
problema que se resuelve
Planificadores y protocolos
Un planificador arbitra los conflictos de acceso. Resuelve los livelocks con first-come-firstserved. Puede tambin manejar deadlocks y no secuencialidad con:
Semntica de transacciones
Es el significado de la ejecucin de la transaccin (qu hace).
Para disear protocolos y planificadores es necesario relacionar la semntica (informal) de las
transacciones con un test que determine si una secuencia de pasos de transacciones entrelazadas
es secuenciable.
Primero: ver que la semntica es apropiada (conservadora: puede prohibir planificaciones que
sean secuenciables pero no permite las que no lo sean).
Segundo: se hace corresponder la semntica con un grafo de ejecucin que permite decidir si
una planificacin es secuenciable.
Se asocia una funcin f
al par LOCK A y UNLOCK A. Argumentos: todos los elementos
bloqueados anteriormente a UNLOCK A. A es el valor inicial de A.
0
Los valores de A son frmulas que se construyen aplicando estas funciones a los valores
iniciales.
Se asume que frmulas diferentes tienen valores diferentes.
Dos planificaciones son equivalentes si sus frmulas para el valor final de cada elemento son
iguales.
T
1
LOCK A
LOCK B
UNLOCK A
f1 ( A, B)
UNLOCK B
f2 ( A, B)
T
2
LOCK B
LOCK C
UNLOCK B
f3 (B, C)
LOCK A
UNLOCK C
UNLOCK A
f4 ( A, B,
C)
f5 ( A, B,
C)
T
3
LOCK A
LOCK C
UNLOCK C
f6 ( A, C)
UNLOCK A
f7 ( A, C)
La planificacin no es secuenciable:
f 3 ( f 2 ( A0 , B0 ), C0 ) en
f5 . En la figura
anterior esto no sucede, por tanto, T2 no puede preceder a T1 en una planificacin secuencial
equivalente.
T1 no puede preceder a T2 ni T2 puede preceder a T1 en una planificacin secuencial
equivalente => no existe dicha planificacin secuencial equivalente.
Test de secuencialidad
Para determinar si un planificador es correcto, se demuestra que cada planificacin que admite
es secuenciable.
Se examina la planificacin con respecto al orden en que se bloquean elementos. Este orden
debe ser consistente con la planificacin secuencial equivalente. Si hay dos secuencias con
rdenes diferentes de transacciones, estos dos rdenes no son consistentes con una planificacin
secuencial.
El problema se reduce a la bsqueda de ciclos en un grafo dirigido.
Algoritmo:
Entrada: Una planificacin S para las transacciones T1,..,Tk.
T2
T2
T1
T1
T2
T2
T3
T1
T2
T3
T3
T
2
LOCK A
LOCK B
Interbloqueo!
di d j , entonces la
Protocolo de rbol
Caso particular de protocolo basado en grafos, grafos que sean rboles con raz.
Reglas:
1.
Cada transaccin
Ti
2.
El primer bloqueo de
Ti
3. Sucesivos bloqueos de Ti slo pueden ser sobre elementos cuyo padre haya bloqueado Ti .
4. Los elementos se pueden desbloquear en cualquier momento.
5.
T no puede bloquear de nuevo un elemento que haya bloqueado y
desbloqueado
i
anteriormente.
Ej:
T1:
T2:
T3:
T4:
Planificacin secuenciable:
T
LOCK B
T
LOCK D
LOCK H
UNLOCK
LOCK E
LOCK D
UNLOCK
UNLOCK
E
LOCK B
LOCK E
UNLOCK H
LOCK G
UNLOCK D
LOCK D
LOCK H
UNLOCK
D
UNLOCK E
UNLOCK B
UNLOCK G
Se puede demostrar que el protocolo de rbol no slo asegura la secuencialidad en cuanto a
conflictos, sino que tambin asegura la ausencia de interbloqueos.
El protocolo de bloqueo de rbol tiene la ventaja sobre el protocolo de bloqueo de dos fases de
que los desbloqueos se pueden dar antes. El hecho de desbloquear antes puede llevar a unos
tiempos de espera menores y a un aumento de la concurrencia. Adicionalmente, debido a que el
protocolo est libre de interbloqueos, no se necesitan retrocesos.
Sin embargo, el protocolo tiene el inconveniente de que, en algunos casos, una transaccin
puede que tenga que bloquear elementos de datos a los que no accede. Por ejemplo, una
transaccin que tenga que acceder a los elementos de datos A y J en el ejemplo anterior, debe
bloquear no slo A y J sino tambin los elementos de datos B, D y H. Estos bloqueos
adicionales producen un aumento del coste de los bloqueos, la posibilidad de tiempos de espera
adicionales y un descenso potencial de la concurrencia.
Adems, sin un conocimiento previo de los elementos de datos que es necesario bloquear, las
transacciones tienen que bloquear la raz del rbol y esto puede reducir considerablemente la
concurrencia.
Pueden existir planificaciones secuenciables que no se pueden obtener por medio del protocolo
de rbol.
Hay planificaciones que son posibles por medio del protocolo de bloqueo de dos fases que no
son posibles por medio del protocolo de rbol y viceversa.
Algoritmo para construir un orden secuencial de las transacciones:
1. Crear un nodo por cada transaccin.
2.
Sean
y Tj transacciones que bloquean el mismo elemento, y FIRST(T) el primer
Ti
rboles
Marcas temporales
Transacciones:
Cada Ti lleva asociada una marca temporal fijada MT (Ti ) .
READ B;
READ A;
PRINT A + B.
T2:
READ B;
B := B 10.000;
WRITE B;
READ A;
A := A + 10.000;
WRITE A;
PRINT A + B.
T
READ B
READ A
T
READ B
B := B
10.000
WRITE B
READ A
PRINT A + B
A := A +
10.000
WRITE A
Protocolos optimistas
Cuando los conflictos entre las transacciones son raros se pueden aplicar tcnicas optimistas,
evitando los protocolos anteriores (ms costosos). Estas tcnicas asumen que no habr
conflictos en las planificaciones y evitan los costosos bloqueos. Cuando se intente comprometer
una transaccin se determinar si ha existido conflicto o no. En su caso, la transaccin se
retroceder y volver a iniciarse.
Si los conflictos son raros tambin lo sern los retrocesos, con lo que el nivel de concurrencia
aumentar, aunque tambin hay que tener en cuenta el coste de los posibles retrocesos en
trminos de tiempo (todas las actualizaciones se hacen en memoria, no hay retrocesos en
cascada porque los cambios no se hacen en la base de datos).
Fases de un protocolo de control de concurrencia optimista:
Fase de lectura. Desde el inicio de la transaccin hasta justo antes de su compromiso. Las
actualizaciones se realizan en memoria, no en la propia base de datos.
Fase de validacin. Es la siguiente a la de lectura. Se comprueba que no se viola la
secuencialidad. Casos:
Transacciones slo de lectura. Se reduce a comprobar que los valores actuales en la
base de datos son los mismos que se leyeron inicialmente.
Transacciones con actualizaciones. Se determina si la transaccin deja a la base de datos
en un estado consistente.
En ambos casos, si la secuencialidad no se conserva, la transaccin se retrocede y se
reinicia.
Fase de escritura. Es posterior a la fase de validacin cuando se mantiene la secuencialidad.
Consiste en escribir en la base de datos los cambios producidos en la copia local.
Fase de validacin:
Cada transaccin T recibe una marca temporal (Inicio(T)) al iniciar su ejecucin, otra al iniciar
su fase de validacin (Validacin(T)) y otra al terminar (Fin(T)).
Para pasar el test de validacin debe ser cierto uno de:
1) Para todas las transacciones S con marcas temporales anteriores a T => Fin(S) < Inicio(T).
2) Si la transaccin T empieza antes de que acabe otra S anterior, entonces:
a)
Los elementos escritos por S no son los ledos por T, y
b) La transaccin S completa su fase de escritura antes de que T comience su fase de
validacin, es decir, Inicio(T) < Fin(S) < Validacin(T)
Compromiso de transacciones
Transacciones activas. En ejecucin
Transacciones completadas. Slo pueden abortar por causa grave: 4.
Datos inseguros
1
2
3
4
5
6
7
8
9
1
0
11
1
12
13
14
5
T1
LOCK A
READ A
A:=A-1
WRITE A
LOCK B
UNLOCK A
T2
LOCK A
READ A
A:=A*2
READ B
WRITE A
COMMIT
UNLOCK A
B:=B/A
Fallo!
(divisin
por
0)->
Recuperacin de cadas
Tipos de cadas:
Error de memoria voltil.
Error de memoria permanente.
Problema: asegurar la atomicidad de las escrituras de las transacciones. Puede haber una cada
del sistema antes de que se hayan escrito todos los datos modificados por una transaccin.
T: WRITE A (A=v)
T: COMMIT
Abortar T
(T,A,v,A0)
(T, commit)
(T, abort)
Paso
Ejemplo anterior:
Antes de 1
4
Antes de 7
(T1,A,9,10)
(T2,begin)
11
12
Despus de 14
(T2,A,18,9)
(T2, commit)
(T1, abort)