Escolar Documentos
Profissional Documentos
Cultura Documentos
8
Processamento de Transacções,
Recuperação de Dados e Controlo
de Concorrência
“I always say, keep a diary and someday it’ll keep you.”
-- Mae West
Bibliografia:
1. R. Ramakrishnan and J. Gehrke. “Database Management Systems”. Addison-Wesley,
2003 (cap.18, 19 e 20).
1
1. Sumário
3
3. Propriedades ACID das transacções
Para preservar a integridade dos dados, o DBMS tem de assegurar:
Atomicidade. Uma transacção é unidade atómica de processamento
que é realizada completamente ou, simplesmente, não é
realizada.
Consistência. A execução isolada duma transacção (i.e. com
nenhuma outra transacção a executar concorrentemente)
preserva a consistência da base de dados.
Isolamento/Independência. As actualizações feitas por uma
transacção são obrigatoriamente invisíveis para outras
transacções enquanto não atinje o estado COMMITTED (o que
resolve o problema da actualização temporária ou temporary
update problem)
Durabilidade. Se uma transacção altera a base de dados e é
COMMITTED, as alterações nunca se perdem mesmo que ocorra
uma falha posterior.
Seriabilidade. Várias transacções são consideradas serializáveis se o
efeito de executá-las duma forma entrelaçada é equivalente a
executá-las em série segundo alguma ordem. Esta propriedade é
importante para garantir a consistência dos dados. 4
4. Requisitos para a consistência duma base
de dados
Controlo da Concorrência
A maioria dos DBMSs são sistemas multi-utilizador.
A execução concorrente de transacções submetidas por vários
utilizadores tem de ser organizada de tal modo que cada
transacção não interfere com as restantes, pois só assim se
pode garantir que não há resultados incorrectos.
A execução concorrente de transacções tem de ser tal que cada
transacção pareça estar a executar isoladamente.
Recuperação de Dados
Falhas do sistema, quer por hardware quer por software, não
poderão deixar a base de dados num estado inconsistente.
5
5. Transacção como Unidade de
Recuperação de Dados
7
7. Recuperação a partir duma Falha numa
Transacção
Falha Catastrófica
Restaura uma cópia anterior da DB a partir dum backup arquivado
Aplica o transaction log à cópia para reconstruir a DB desde o estado
corrente arquivado na cópia até ao instante da falha. É óbvio que só
as transacções COMMITTED registadas no log serão refeitas.
Dump incremental + log cada transacção
Falha Não-Catastrófica
Inverte as operações que causaram inconsistência, desfazendo-as e,
possivelmente, refazendo alterações legítimas que se perderam.
As entradas ou verbetes registados no system log são consultadas
durante a recuperação de dados.
Não há necessidade de usar uma cópia completa de arquivo da DB.
8
Veja-se diagrama
mais à frente!
8. Estados da Transacção
Para efeitos de recuperação de dados, o sistema precisa de
registar quando uma transacção começa, é consignada
(committed) e termina.
Begin_Transaction: marca o início de execução da transacção;
End_Transaction: especifica que as operações de R/W
terminaram e marca o fim de execução da transacção (mas
pode ser ser abortada pelo controlo da concorrência);
Commit_Transaction: assinala o fim bem-sucedido duma
transacção. Quaisquer actualizações executadas pela
transacção podem ser consignadas (committed) para a DB
com segurança e não serão desfeitas;
Rollback (ou Abort): assinala que a transacção chegou ao fim
sem sucesso. Quaisquer alterações que a transacção tenha
causado na DB serão desfeitas;
Undo: semelhante ao estado ROLLBACK, mas aplica-se a
uma só operação em vez de uma transacção como um todo;
Redo: especifica que certas operações duma transacção têm
de ser refeitas para garantir que todas as operações duma
transacção consignada (committed) foram aplicadas com 9
sucesso a uma DB;
9. Entradas no System Log
Qualquer transacção tem um transaction-id
único gerado pelo sistema. Credit_labmark (sno NUMBER,
cno CHAR, credit NUMBER)
[start_transaction, transaction-id]: o old_mark NUMBER;
o início de execução duma transacção é new_mark NUMBER;
identificado pelo transaction-id.
SELECT labmark INTO old_mark
[read_item, transaction-id, X]: a FROM enrol
transacção identificada pelo transaction-id WHERE studno = sno and
lê o valor do item X da DB. É opcional em courseno = cno FOR UPDATE OF
alguns protocolos. labmark;
ROLLBACK ROLLBACK
READ, WRITE
terminated
failed
write_item(X):
Escreve o valor da variável X do programa para o item X da DB:
1. encontra o endereço do bloco em disco que contém o item X
2. copia aquele bloco em disco para um buffer em memória principal
3. copia item da variável X do programa para a sua localização corrente
no buffer e armazena o bloco actualizado no disco (este passo
actualiza a DB em disco)
X:= X
12
12. Checkpoints no System Log
Um registo de [checkpoint] é escrito
periodicamente no log quando o sistema
escreve para a DB em disco o efeito de todas
as operações de escrita (WRITE) de
transacções consignadas (committed
data
transactions).
Todas as transacções cujas entradas ou
verbetes [commit, transaction-id] podem
ser encontradas no system log não requererão
que as suas operações WRITE sejam refeitas
no caso de haver um system crash.
Antes de uma transacção atingir o commit
point, força-se a escrita do ficheiro log para o
disco.
Acções que constituem um checkpoint:
suspensão temporária da execução da transacção
escrita forçada para disco de todos os blocos
actualizados da DB existentes nos buffers em log
RAM
escrita de um registo de [checkpoint] para o log e
escrita forçada do log para o disco
retoma da execução da transacção
13
13. Logging com Escrita à Cabeça
(Write Ahead Logging)
Execução Simultânea
Account B Sue Smith £0 T1 Account A Fred Bloggs £500
Resultado Final
Account A 800
Account B 500
Account C 400
15
15. Algoritmos de Escalonamneto de
Transacções
Seriabilidade de Transacções
A execução de qualquer número de transacções em paralelo tem
de ter o mesmo efeito sobre uma DB que executá-las em série.
16
15.1 Problema da Actualização Perdida
Duas transacções que acedem ao mesmo item X duma DB
têm as suas operações entrelaçadas de tal forma que tornam
o item incorrecto.
T1: (joe) T2: (fred) X Y
read_item(X); 4
X:= X - N; 2
read_item(X); 4
X:= X + M; 7
write_item(X); 2
read_item(Y); 8
write_item(X); 7
Y:= Y + N; 10
write_item(Y); 10
transaction T1 fails and must change the value of X back to its old
value
19
meanwhile T2 has read the “temporary” incorrect value of X
16. Escalas de Transacções
Uma escala S de n transacções é uma sequência das
operações destas transacções.
as transacções podem ser entrelaçadas
21
16.1 Exemplos de Escalas Seriadas
Escala A Escala B
22
16.2 Exemplos de Escalas Não-Seriada
Escala C Escala D
write_lock(X)
read_item(X); 4
X:= X - N; 2
unlock(X)
write_lock(X)
read_item(X); 4
X:= X + M; 7
unlock(X)
write_lock(X)
write_item(X); 2
unlock(X)
write_lock(Y)
read_item(Y); 8
write_lock(X)
write_item(X); 7
unlock(X)
Y:= Y + N; 10
write_item(Y); 10
unlock(Y)
27
21. Os fechos não garantem seriabilidade
X=20, Y=30
T1 T2
read_lock(Y); read_lock(X);
read_item(Y); read_item(X);
unlock(Y); unlock(X);
write_lock(X); write_lock(Y);
read_item(X); read_item(Y);
X:=X+Y; Y:=X+Y;
write_item(X); write_item(Y);
unlock(X); unlock(Y);
T1 T2
read_lock(Y); read_lock(X);
read_item(Y); read_item(X);
write_lock(X); write_lock(Y);
unlock(Y); unlock(X);
read_item(X); read_item(Y);
X:=X+Y; Y:=X+Y;
write_item(X); write_item(Y);
unlock(X); unlock(Y);
29
23. Trancamento em Duas Fases
(Two-Phase Locking - 2PL)
2PL básico:
quando uma transacção liberta um fecho, ela pode ou não
requerer outro fecho
lock point
obtain lock
number
of locks release lock
Phase 1 Phase 2
BEGIN END
obtain lock
Transaction
BEGIN period of data END duration
item use
31
24. Deadlock: um problema resultante do
trancamento
Cada uma das duas ou mais transacções está à espera que
outra liberte um item. Também designado pelo abraço da
morte.
T1 T2
read_lock(Y);
read_item(Y);
read_lock(X);
read_item(X);
write_lock(X);
write_lock(Y);
32
25. Deadlocks e Livelocks
Protocoolo de prevenção de deadlocks:
2PL conservador
Selos nas transacções (transacções mais recentes abortadas)
nenhuma espera
espera cautelosa
Compromissos (trafe-offs)
granularidade lata
quanto maior o tamanho do item, menor é o grau da
concorrência
granularidade fina
quanto menor o tamanho do item, maior número de
fechos são necessários gerir e armazenar e mais
operações de lock/unlock são necessárias.
34
Outras Estratégias de Controlo da Concorrência e
Recuperação de Dados
35
27. Recuperação de Dados:
Técnica de Paginação na Sombra
Os dados não são
actualizados ‘in place’
Para efeitos de recuperação Database data
de dados, a base de dados é pages/blocks
vista como sendo constituída
page 5
por um número n de páginas
ou blocos de tamanho fixo. Page table
page 1
Uma tabela de páginas com 1
n entradas é construída de 2 page 4
tal modo que a i-ésima 3
4
entrada na tabela aponta 5 page 2
para a i-ésima página da 6
base de dados em disco. page 3
A tabela de páginas corrente
aponta para as páginas page 6
correntes mais recentes da
base de dados em disco.
36
27. Recuperação de Dados:
Técnica de Paginação na Sombra (cont.1)
Quando uma
transacção começa a
Database data pages (blocks)
executar:
a tabela de páginas Current page table
page 5 (old)
corrente é copiada (after updating pages Shadow page table
para uma tabela de 2,6) page 1 (not updated)
páginas na sombra
a tabela de páginas page 4 1
na sombra é então 1
2 2
salvaguardada page 2 (old) 3
3 4
a tabela de páginas 4
na sombra nunca é 5 5
page 3 6
alterada durante a 6
transacção
page 6
operações de
escrita— nova cópia page 2 (new)
duma página é criada
e a entrada na tabela
corrente é modificada page 5 (new)
de modo a apontar
para a nova
página/bloco do disco 37
27. Recuperação de Dados:
Técnica de Paginação na Sombra (cont.2)
Para recuperar duma falha:
o estado da DB antes
Database data pages (blocks)
da transacção está
disponível na tabela de Current page table page 5 (old)
páginas na sombra (after updating pages Shadowpage table
2,6) page 1 (not updated)
liberta páginas
modificadas page 4 1
1 2
descarta tabelas de 2
3 page 2 (old) 3
páginas corrente 4
4 5
Aquele estado é 5 page 3
6 6
recuperado por cópia
da tabela na sombra page 6
para a tabela corrente
page 2 (new)
Consignar (commiting) uma
transacção page 5 (new)
descartar anterior
página na sombra
libertar antigas tabelas
que ela referencia
38
Garbage collection
27. Conclusões
A gestão de transacções lida com dois requisitos chave
de qualquer sistema de bases de dados:
Resiliência
na capacidade dos dados sobreviverem a crashes de
hardware e erros de software sem perdas e sem ficar
inconsistente
Controlo de Acesso
na capacidade de permitir acesso simultâneo aos dados
por vários utilizadores duma forma consistente e só com
acesso autorizado
39 FIM