Bases de Dados

Propaganda
Bases de Dados
Transacções
Propriedades ACID
ƒ Atomicidade
• se a transação falhar entre os
passos 4 – 6,
6 os passos 1 – 3
ficam sem efeito
ƒ Consistência
• a soma A+B tem que ser igual
antes e depois
1
2
3
4
5
6
Ti : read(A)
A := A – 50
write(A)
read(B)
B := B + 50
write(B)
ƒ Isolamento
• nenhuma outra operação deve ler os valores de A e B entre os
passos 3 e 6
ƒ Durabilidade
• se a transacção termina com sucesso, as alterações são
definitivas
IST ▪ DEI ▪ Bases de Dados
2
1
Transacções e concorrência
ƒ A forma mais fácil de garantir
que 2 transacções não
interferem seria executá-las
em série
• mas assim o sistema
opera à velocidade do
componente mais lento
(disco)
• faz com que pequenas
transacções tenham que
esperar pela conclusão de
transacções mais
demoradas
IST ▪ DEI ▪ Bases de Dados
3
Transacções e concorrência
ƒ Os SGBDs permitem que múltiplas transacções sejam
executas concorrentemente
ƒ Necessidade de escalonar transacções concorrentes
ƒ Escalonamento
• ordem cronológica pela qual as instruções de várias
transacções são executadas
▫ preservar a ordem das instruções de cada transacção
IST ▪ DEI ▪ Bases de Dados
4
2
Escalonamento – exemplos 1 e 2
ƒ T1 transfere 50€ de A para B
ƒ T2 transfere 10% de A para B
• estes são escalonamentos em série:
1
2
IST ▪ DEI ▪ Bases de Dados
5
Escalonamento – exemplos 1 e 3
ƒ O escalonamento 3 não é em série, mas é equivalente
• em ambos, a soma A+B é preservada
1
3
IST ▪ DEI ▪ Bases de Dados
6
3
Escalonamento – exemplos 3 e 4
ƒ O escalonamento 4 não preserva A+B
3
4
IST ▪ DEI ▪ Bases de Dados
7
Ordem das instruções
ƒ Num escalonamento onde 2 transacções T1 e T2
acedem ao mesmo objecto Q
• T1: read(Q) e T2: read(Q)
▫ a ordem é indiferente
• T1: read(Q) e T2: write(Q)
▫ a ordem é importante
• T1: write(Q) e T2: read(Q)
▫ a ordem é importante
p
• T1: write(Q) e T2: write(Q)
▫ a ordem não afecta nem T1 nem T2 mas afecta a próxima
instrução de read(Q)
IST ▪ DEI ▪ Bases de Dados
8
4
Instruções de leitura e escrita
3
IST ▪ DEI ▪ Bases de Dados
9
Serialização por conflitos
ƒ Existe conflito se as instruções de T1 e T2 tiverem de
ser feitas numa certa ordem
• se não houver conflito, podem ser trocadas
IST ▪ DEI ▪ Bases de Dados
10
5
Objectivo da serialização
ƒ Se cada transacção preserva a consistência da BD
• então o escalonamento em série também preserva
• logo, se for possível demonstrar que um
escalonamento concorrente é serializável
▫ então esse escalonamento concorrente também preserva
a consistência da BD
IST ▪ DEI ▪ Bases de Dados
11
Teste de serialização
ƒ Forma simples de determinar se um escalonamento é
serializável
• construir um grafo de precedências
▫ os nós são transacções (T1, T2, ..., Tn)
▫ os arcos são conflitos (Ti → Tk )
• desenha-se um arco de Ti para Tk se
▫ Ti : write(Q) antes de Tk : read(Q)
▫ Ti : read(Q) antes de Tk : write(Q)
▫ Ti : write(Q) antes de Tk : write(Q)
IST ▪ DEI ▪ Bases de Dados
12
6
Teste de serialização – exemplos 1 e 3
1
2
IST ▪ DEI ▪ Bases de Dados
13
Teste de serialização – exemplo 4
ƒ O escalonamento 4 não é serializável
4
IST ▪ DEI ▪ Bases de Dados
14
7
Teste de serialização – outros exemplos
ƒ Um escalonamento é serializável
se o seu grafo de precedências
não
ã ti
tiver ciclos
i l ((acíclico)
í li )
ƒ Se o grafo for acíclico, as
transacções podem ser
executadas por qualquer ordem
que respeite o grafo
IST ▪ DEI ▪ Bases de Dados
15
Problemas na serialização por conflitos
ƒ Segundo os critérios, este
escalonamento não é
serializável
i li á l
• mas sabemos que é
válido (mantém A+B)
• exigiria análise mais
detalhada das
operações…
IST ▪ DEI ▪ Bases de Dados
16
8
Recuperação em escalonamentos
ƒ Uma transacção que complete com sucesso tem uma
instrução de commit como última instrução
commit
commit
ƒ U
Uma ttransacção
ã que ffalhe
lh ttem uma iinstrução
t ã d
de abort
b t
como última instrução
• ao que se segue o rollback (undo) da transacção
17
IST ▪ DEI ▪ Bases de Dados
Recuperação em escalonamentos
commit
abort
ƒ Quando T8 falha, T9 já completou e não pode ser
cancelada
l d
• este escalonamento não é recuperável
IST ▪ DEI ▪ Bases de Dados
18
9
Escalonamentos recuperáveis
ƒ Considerar apenas escalonamentos recuperáveis
• estes escalonamentos devem obedecer à seguinte
condição:
Para qualquer par de transacções Ti e Tk
se Ti executa write(Q) antes de Tk executar read(Q)
então Ti faz commit antes de Tk fazer commit
commit
commit
19
IST ▪ DEI ▪ Bases de Dados
Rollback encadeado
ƒ Erro numa transacção pode levar ao rollback de várias
transacções
abort
commit
ƒ Comportamento indesejado
• pode obrigar a desfazer várias tarefas já realizadas
IST ▪ DEI ▪ Bases de Dados
20
10
Rollback encadeado
ƒ Considerar apenas escalonamentos sem hipótese de
rollback encadeado
• estes escalonamentos devem obedecer à seguinte
condição:
Para qualquer par de transacções Ti e Tk
se Ti executa write(Q) antes de Tk executar read(Q)
então Ti faz commit antes de Tk fazer read
ƒ Esta condição garante que o escalonamento é
também recuperável
IST ▪ DEI ▪ Bases de Dados
21
Controlo de concorrência
ƒ Os escalonamentos devem ser serializáveis,
recuperáveis e preferencialmente sem rollbacks
encadeados
d d
• um sistema em que só corre 1 transacção de cada
vez garante isto, mas elimina a concorrência
• são necessários mecanismos que permitam a
concorrência, mas garantam as condições
desejadas
IST ▪ DEI ▪ Bases de Dados
22
11
Níveis de isolamento menos exigentes
ƒ Algumas operações não exigem 100% de consistência
• p.ex. uma consulta que determina de forma
aproximada o saldo médio de todas as contas
• p.ex. o cálculo de dados estatísticos para
optimização de operações
ƒ Estas transacções não precisam de ser serializadas
com outras
• poupam-se
poupam se as verificações e deixa
deixa-se
se a transacção
correr em livremente em paralelo
▫ solução de compromisso entre exactidão dos resultados e
desempenho do sistema
23
IST ▪ DEI ▪ Bases de Dados
Níveis de isolamento em SQL
dirty
reads
non-repeatable
reads
phantom
reads
SERIALIZABLE
S
não
ão
não
ão
não
ão
REPEATABLE READ
não
não
possível
READ COMMITTED
não
possível
possível
possível
possível
possível
Nível de isolamento
READ UNCOMMITTED
dirty
y read: a transaction reads data written byy a concurrent uncommitted
transaction.
nonrepeatable read: a transaction re-reads data it has previously read and
finds that data has been modified by another transaction (that committed
since the initial read)
phantom read: a transaction re-executes a query returning a set of rows that
satisfy a search condition and finds that the set of rows satisfying the
condition has changed due to another recently-committed transaction.
24
IST ▪ DEI ▪ Bases de Dados
12
Definição de transacções em SQL
ƒ As linguagens de manipulação de dados têm de ter
elementos para dizer que acções fazem parte de uma
t
transacção
ã
ƒ Em SQL, qualquer operação inicia implicitamente uma
transacção que só termina com
• commit – torna os resultados permanentes
• rollback – cancela a transacção actual
IST ▪ DEI ▪ Bases de Dados
25
Exemplo com Postgres
ƒ Executar uma transacção
start transaction;
…
commit;
ou
rollback;
ƒ Vários sistemas usam autocommit por omissão
• se start transaction for omitido
▫ cada operação é uma transacção
▫ commit automático no fim da operação
IST ▪ DEI ▪ Bases de Dados
26
13
Exemplo com Postgres
Verificar saldos:
select balance from account where account_number = 'A-101';
select balance from account where account_number
account number = 'A
A-102
102';;
Transferir 350€ da conta A-101 para a conta A-102:
start transaction;
update account set balance = balance – 350 where
account_number = 'A-101';
update account set balance = balance + 350 where
account_number = 'A-102';
commit;
IST ▪ DEI ▪ Bases de Dados
27
14
Download