Gestão de transacções
noções básicas
 modelo simples
 modelo elaborado
 recuperação
 marcas temporais

Gabriel David
FEUP - Rua dos Bragas, 4099 Porto Codex - PORTUGAL
Tel. 351-2-2041842 - Fax: 351-2-319280
Email: [email protected]
URL: http://www.fe.up.pt
1
Execução de programas
Execução série - um programa de cada vez
versus
Execução concorrente - vários programas partilham o CPU
Problema: garantir que os vários programas não
interferem de forma inesperada
Concorrência - 2
Programas e BD

Transacção



uma execução de um programa
podem coexistir várias transacções do mesmo programa
Interacção transacção/BD



transacção lê dados da BD para o seu espaço de trabalho
cálculos feitos no espaço de trabalho completamente isolados
transacção escreve resultados do espaço de trabalho para a BD
P1
P2
T1
T2
T3
BD
Concorrência - 3
Tipos de acesso

Programas executados em série


modelo na cabeça do programador
Acesso simultâneo para leitura e escrita


sistema de reservas - Programa: READ A; A=A+1; WRITE A;
Problema da actualização falhada: dois acessos diferentes reservarem o
mesmo lugar
A(BD) 5
T1:
READ A
T2:
5
A(T2)
5
5
6
6
A=A+1
READ A
A(T1)

5
WRITE A
A=A+1
WRITE A
5
6
6
6
5
5
6
6
6
Acesso simultâneo só para leitura


recenseamento
sem interferência
Concorrência - 4
Propriedades das transacções

SGBD deve manter as propriedades ACID





atomicidade - as operações da transacção efectivam-se na BD
ou todas ou nenhuma
consistência - transacção sozinha preserva consistência da BD
isolamento - as transacções apesar de concorrentes não
interferem; para cada par Tl - Tk o efeito final é o de executar Tl
e depois Tk, ou Tk e depois Tl
durabilidade - efeitos de uma transacção com sucesso
persistem na BD mesmo em caso de avarias no sistema
consistência


primariamente um problema do programador da transacção
SGBD pode verificar automaticamente regras de integridade
Concorrência - 5
Atomicidade


Importante também para manter a consistência
Operação Transferência bancária
T(valor, conta_origem, conta_destino)
1 READ conta_origem
2 conta_origem= conta_origem - valor
3 WRITE conta_origem
4 READ conta_ destino
5 conta_ destino = conta_ destino + valor
6 WRITE conta_ destino
 interrupção em 4 deixa BD inconsistente

Razões para quebra de atomicidade



avaria de hardware
erro de software
bloqueio em competição por recursos
Concorrência - 6
Bloqueios

Isolamento entre transacções




Gestor de bloqueios




dividir a BD em itens, recursos necessários para as transacções
item - unidade de dados, desde a BD à tabela, linha ou campo
controlo de acesso através do bloqueio de itens
regista, para cada item I, quais as transacções que estão a ler ou
escrever alguma parte de I
controla o acesso de uma segunda transacção, de acordo com
uma determinada política
granularidade dos itens condiciona peso da gestão de bloqueios;
transacção típica deve bloquear poucos itens
Bloqueio (lock)


é um privilégio de acesso a um item
primitiva de sincronização
Concorrência - 7
Gestão da concorrência

Controlar item com bloqueio




pedir bloqueio de A antes da leitura
outras transacções que tentem bloquear A esperam
desbloquear A depois da escrita
Reserva de lugar

Programa: LOCK A; READ A; A=A+1;
WRITE A; UNLOCK A;
A(BD) 5
5
5
5
T1:
READ A
A=A+1
WRITE A UNLOCK A
LOCK A
6
T2:
6
LOCK A
A(T1)
5
6
A(T2)
6
6
6 7
…
6
6 7

garante isolamento
Concorrência - 8
Problemas

Bloqueio activo (livelock)



T1 e T2 pedem bloqueio de A; T1 obtém; T3 pede bloqueio de A;
quando T1 desbloqueia, T3 é servido e T2 fica à espera…
hipótese de resolução: servir sempre o pedido mais antigo
Encravamento (deadlock)
T1: LOCK A; LOCK B; UNLOCK A; UNLOCK B;
T2: LOCK B; LOCK A; UNLOCK B; UNLOCK A;
 T1 bloqueia A e T2 bloqueia B; ambos ficam parados à espera
que o outro desbloqueie
 hipótese 1: obrigar a transacção a pedir todos os bloqueios de
uma vez e o gestor concede todos ou nenhum
 hipótese 2: atribuir uma ordem aos itens e os pedidos de
bloqueio serem feitos por essa ordem
 hipótese 3: não prevenir; SGBD verifica se há encravamento e
aborta uma das transacções
Concorrência - 9
Escalonamento

Escalonamento de um conjunto de transacções



ordem de execução dos passos elementares das várias transacções
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;
T1
READ A
A=A-10
WRITE A
READ B
B=B+10
WRITE B
T2
T2
READ B
T1
READ A
A=A-10
A=A-10
WRITE A
WRITE A
B=B-20
WRITE B
READ B
READ B
WRITE B
READ C
B=B+10
B=B+10
READ C
C=C+20
WRITE B
WRITE C
 (B=B-10)
T2
READ B
B=B-20
READ B
B=B-20
WRITE B
READ C
C=C+20
WRITE C
 (B=B-10)
T1
READ A
WRITE B
C=C+20
WRITE C
 (B=B+10)
Concorrência - 10
Seriabilidade

Escalonamento série (caso )


Escalonamento serializável (caso )


efeito equivalente a um qualquer escalonamento série
Escalonamento não serializável (caso )


todos os passos de cada transacção executados consecutivamente
a evitar (!), mas sem olhar para expressões calculadas, apenas
para a sequência de operações e bloqueios
Escalonador





parte do SGBD que arbitra conflitos entre transacções
recebe informação do gestor de bloqueios
evita bloqueio activo, encravamento e não seriabilidade
fica facilitado se as transacções seguirem protocolos adequados
escalonamento legal se não violar bloqueios
Concorrência - 11
Modelo simples

Assume-se que bloquear implica ler e desbloquear
escrever


modelo simples é não fatal: pode impedir escalonamentos
serializáveis, mas não aceita não serializáveis
Teste de seriabilidade de um escalonamento




criar um grafo dirigido cujos nós são as transacções
para cada passo Tk: UNLOCK Am, se existir a seguir um passo
Tl: LOCK Am, desenhar um arco de Tk para Tl.
escalonamento serializável se não houver ciclos no grafo
as setas indicam a ordem de um escalonamento série
equivalente (ordenação topológica)
Concorrência - 12
Teste de seriabilidade

Não serializável

T2 deve correr antes de T1 e vice-versa
T1
LOCK A
T2
T3
LOCK B
LOCK C
UNLOCK B
T2
T1
LOCK B
UNLOCK A
LOCK A
UNLOCK C
UNLOCK A
T3
LOCK A
LOCK C
UNLOCK B
UNLOCK C
UNLOCK A
Concorrência - 13
Bloqueio em duas fases

Problema: garantir a seriabilidade





combinação escalonador + protocolo
protocolo de bloqueio em duas fases: todos os bloqueios (1ª
fase) são pedidos antes de todos os desbloqueamentos (2ª fase)
trabalho do escalonador: basta conceder o bloqueio se estiver
disponível e suspender ou abortar a transacção caso não esteja,
isto é, só se verifica a legalidade da transacção
garante-se que qualquer escalonamento legal é serializável
um escalonamento série correspondente é o dado pela ordem
dos pontos de bloqueio das várias transacções
• ponto de bloqueio é o instante em que ocorre o último bloqueio;
considera-se que todo o processamento ocorre nesse instante,
antes de começar a desbloquear

verificar coerência com grafo de seriabilidade
• T2 (pág anterior) não respeita bloqueio em duas fases
Concorrência - 14
Contra-exemplo

T1 não é de duas fases   não serializável



T1: LOCK A; UNLOCK A; LOCK B; UNLOCK B
T2: LOCK A; LOCK B; UNLOCK A; UNLOCK B
T1
T2
LOCK A
…
UNLOCK A
T1
LOCK A
LOCK B
UNLOCK A
UNLOCK B
T2
LOCK B
UNLOCK B

conclusão: bloqueio em duas fases é óptimo
Concorrência - 15
Download

Concorrência 1