Você está na página 1de 8

Conceitos

§ Transação
Transações § Atividade indivisível do ponto de vista do usuário
§ Envolve múltiplas operações de acesso a um BD
§ Pode atualizar os dados do BD
§ Conceitos
§ Recuperação § BD pode estar inconsistente ao longo da transação
§ Propriedades § Ao ser concluída,
concluída, deve manter a consistência do BD
§ Concorrência
§ Serialização
§ Transações Distribuídas BD Início da BD Fim da BD
consistente transação temporariamente transação consistente
inconsistente

79 80

Conceitos Conceitos
§ Exemplos de transações § Transações em SQL
§ Saque bancário § Exemplo: Aplicação Financeira
§ Transferência de fundos Begin Transaction Aplicação
§ Reserva de passagem Update Conta Set Saldo = Saldo – @valor
Where NumConta = @num
§ Venda ao consumidor Update Aplic Set Saldo = Saldo + @valor
§ Comércio entre empresas Where NumConta = @num and Tipo = @tipo
§ Cadastro de usuário Commit Transaction Aplicação
§ Mudança de senha § Execução da transação:
Read(
Read(Conta);
Conta);
§ Alocação de recursos Conta.Saldo = Conta.Saldo – @valor;
§ Controle de estoque Write(
Write(Conta);
Conta);
§ etc. Read (Aplic);
Aplic);
Aplic.Saldo
Aplic.Saldo = Aplic.Saldo
Aplic.Saldo + @valor;
Write (Aplic);
Aplic);
81 82

Conceitos Conceitos
§ Para executar uma transação com sucesso,
sucesso, § Estados da Transação
precisamos evitar os seguintes problemas:
problemas: Aguarda Transação é
§ Falhas de hardware e de software podem impedir a conclusão após a concluída
última operação com sucesso
que uma transação se complete, interrompendo-
interrompendo-a Efetivação
antes de ser completada Efetivada
parcial
§ Uma transação,
transação, ao alterar os dados, pode fazer com
que outras transações executadas concorrentemente
leiam dados inconsistentes (valores inválidos)
inválidos) Ativa
§ Estados possíveis ao final de uma transação:
transação: Permanece
§ Efetivada (commit): transação concluída com sucesso ativa enquanto
está executando Falha Abortada
§ Abortada:
Abortada: transação não foi concluída devido a falha;
falha;
implica em desfazer todas as alterações (rollback) Não pode mais Transação é
ser concluída desfeita e BD
83 normalmente é recuperado 84
Conceitos Recuperação
§ Tipos de Falha § Uma transação é concluída ao ser efetivada ou
§ Falha de processamento: ocorrida ao processar a abortada pelo sistema
transação devido a dois tipos de erro § Ao ser efetivada, a transação só pode ser desfeita
com uma transação de compensação
§ Erro lógico: transação interrompida devido a uma
entrada inválida, dado inexistente, overflow, etc. § Opções em caso de aborto da transação
§ Reiniciar a transação:
transação: se a falha for transitória
§ Erro de sistema: transação é abortada ao atingir
um estado inadequado (ex.: deadlock) § Matar a transação:
transação: se a falha for permanente
§ Falha de mídia: ocorrida devido a um bloco de disco § Recuperação de Estado (Rollback)
corrompido ou a um defeito irreparável no HD § Ocorre quando a transação é abortada devido a uma
falha ou a uma condição não satisfeita
§ Falha de sistema: causada por uma falha de
hardware ou por um bug no S.O. ou no SGBD § Dados retomam os valores que tinham antes da
transação ter sido iniciada
85 86

Recuperação Recuperação
§ Transação pode ser recuperada explicitamente § Recuperação baseada em Logs
caso uma condição não seja satisfeita § Todas as operações são registradas
Begin Transaction Aplicação <Ti, start>,
start>, <Ti, commit>,
commit>, <Ti, abort>
abort>
Update Conta Set Saldo = Saldo – @valor § No log são identificadas a transação e o dado, além
Where NumConta = @num do seu valor antigo e do valor novo
If ((Select
((Select Saldo from Conta <Ti, Aj, V1, V2>
Where NumConta = @num) < 0 )
Begin § Operações podem ser desfeitas em caso de falha
Print 'Erro: Saldo insuficiente para efetuar a transação.'
transação.'
Rollback Transaction Aplicação § Recuperação usando Checkpoint
End § Pontos de verificação são criados periodicamente,
Else indicando instantes em que o BD está consistente
Begin
Update Aplic Set Saldo = Saldo + @valor § Nos checkpoints, são gravados no disco os dados em
Where NumConta = @num and Tipo = @tipo memória, os blocos alterados e os registros de log
Commit Transaction Aplicação § Rollback verifica até o último checkpoint do log
End 87 88

Recuperação Recuperação
§ Recuperação usando Cópia Shadow (Sombra) § Rollback usando Cópia Shadow (cont.)
§ SGBD mantém um ponteiro para o BD no disco
§ É criada uma nova cópia do BD com as modificações
§ A cópia antiga (ou cópia shadow) é mantida durante DB_pointer DB_pointer DB_pointer
a transação

û
§ No momento da efetivação, o ponteiro passa a
apontar para a nova cópia do BD Página Página Página Página Página
Antiga Antiga Nova Antiga Nova
§ Se transação for abortada, basta manter o ponteiro
do BD do BD do BD do BD do BD
para a cópia antiga e apagar a cópia nova
§ Otimização: ao invés de copiar o BD inteiro, podemos Antes Durante Depois
trabalhar com páginas do BD
89 90
Propriedades Propriedades
§ Propriedades das Transações § Garantia das propriedades ACID
§ Atomicidade: todas as operações da transação são § Atomicidade pode ser garantida usando cópia shadow
concluídas, ou nenhuma delas é efetuada se todos os dados estiverem na mesma página; caso
§ Consistência: a execução de transações isoladas contrário é necessário controlar a concorrência no
(sem concorrência) preserva a integridade do BD acesso aos dados (assunto da próxima unidade)
§ Isolamento: uma transação não toma conhecimento § Consistência e Isolamento também requerem
de outras transações concorrentes; com isso, temos
sempre a sensação de que uma transação Ti é controle de concorrência ao longo da transação
anterior ou posterior a Tj, e nunca concorrente § Durabilidade é garantida gravando as alterações nos
§ Durabilidade: depois de completada a transação, as dados em meio persistente ao concluir a transação
modificações efetuadas por ela no BD se tornam
persistentes, mesmo em caso de falha

91 92

Propriedades Concorrência
§ Efeitos das propriedades ACID § Transações podem ser executadas:
§ Exemplo: execução de transação - aplicação financeira § Seqüencialmente: uma transação Ti termina antes do
Read(
Read(Contas);
Contas); início ou começa após o final de uma transação Tj
Contas.Saldo = Contas.Saldo – @ valor; § Concorrentemente: partes das transações Ti e Tj
Write(
Write(Contas);
Contas); podem ser processadas em paralelo
Read (Aplic);
Aplic); § Concorrência entre transações é necessária para
Aplic.Saldo Aplic.Saldo + @valor;
Aplic.Saldo = Aplic.Saldo
melhorar o desempenho
Write (Aplic);
Aplic);
§ Atomicidade: faz todas as operações ou nenhuma § Aproveita o tempo que uma transação permanece
bloqueada devido a operações de leitura e escrita no
§ Consistência: deve manter o saldo total do cliente disco para processar outras transações
§ Isolamento: não há influência de transações paralelas § Evita que transações muito longas retardem a
§ Durabilidade: salva as modificações no BD execução de transações mais curtas

93 94

Concorrência Concorrência
§ Execuções concorrentes implicam que:
que: § Exemplo:
Exemplo: suponha duas transações T1 e T2
§ O processador executa cada transação por um § T1: Read (Conta);
Conta);
tempo, alternando entre as transações Conta.Saldo = Conta.Saldo – 200;
§ Transações têm sua execução retomada ciclicamente Write (Conta);
Conta);
Read (Aplic);
Aplic);
§ Execuções concorrentes precisam garantir as Aplic.Saldo
Aplic.Saldo = Aplic.Saldo
Aplic.Saldo + 200;
propriedades de consistência e isolamento Write (Aplic);
Aplic);
§ A definição de escalas de execução (schedules) § T2: Read (Conta);
Conta);
identifica as operações que podem ser efetuadas X = Conta.Saldo * 0.5;
0.5;
concorrentemente sem afetar a consistência do BD Conta.Saldo = Conta.Saldo - X;
§ Controle de concorrência (visto
(visto na próxima unidade) Write (Conta);
Conta);
impede que um dado que está sendo alterado por Read (Aplic);
Aplic);
uma transação seja usado por outra transação Aplic.Saldo
Aplic.Saldo = Aplic.Saldo
Aplic.Saldo + X;
Write (Aplic);
Aplic);
95 96
Concorrência Concorrência
§ Escalas para execução seqüenciais do exemplo § Exemplo de escala concorrente equivalente à
§ Suponha que o cliente tem um saldo total de R$2000, execução seqüencial T1 à T2
sendo R$1000 na conta e R$1000 em aplicações T1 T2
§ Se T1 for executada antes de T2 teremos ao final Read (Conta);
Conta.Saldo = Conta.Saldo – 200;
§ Conta.Saldo = R$ 400 Write (Conta);
§ Aplic.Saldo = R$ 1600 Read (Conta);
X = Conta.Saldo * 0.5;
§ Já se T2 for executada antes de T1, teremos Conta.Saldo = Conta.Saldo - X;
Write (Conta);
§ Conta.Saldo = R$ 300 Read (Aplic);
§ Aplic.Saldo = R$ 1700 Aplic.Saldo = Aplic.Saldo + 200;
Write (Aplic);
§ O saldo total é mantido em R$ 2000 nos dois casos Read (Aplic);
Aplic.Saldo = Aplic.Saldo + X;
Write (Aplic);
97 98

Concorrência Concorrência
§ Exemplo de escala concorrente que não respeita § A recuperação de estado é dificultada quando
o isolamento à saldo total não é preservado há concorrência entre transações
T1 T2 § Na escala concorrente do slide 99, se T1 falha,
falha, T2 tem
Read (Conta); que ser refeita,
refeita, pois leu um valor modificado por T1
Conta.Saldo = Conta.Saldo – 200;
Read (Conta); § Nestes casos,
casos, a recuperação é feita em cascata à
X = Conta.Saldo * 0.5; cancelar transaç
transações que leram valores invá
inválidos
Conta.Saldo = Conta.Saldo - X;
Write (Conta); // Saldo = 500 § Rollback em cascata pode ser evitado obrigando que
Write (Conta); // Saldo = 800 após o commit de T1
T2 leia o valor escrito por T1 só apó
Read (Aplic);
Aplic.Saldo = Aplic.Saldo + 200; efetivação de T2 ocorrer antes do commit de T1
§ Se a efetivaç
Write (Aplic); será impossível fazer o rollback em cascata
Read (Aplic);
Aplic.Saldo = Aplic.Saldo + X;
Write (Aplic);
99 100

Serialização Serialização
§ Isolamento obriga que uma escala concorrente § Serialização de Conflito
seja equivalente a uma escala seqüencial § Instruções das transações Ti e Tj são conflitantes se
§ Uma escala concorrente equivalente a uma ambas acessam um mesmo dado Q e se pelo menos
escala seqüencial é dita serializável uma delas modifica o valor de Q
§ Considere apenas as operações de leitura e escrita Instrução de Ti Instrução de Tj Há conflito?
para verificar a serialização Read(Q) Read(Q) Não
§ As transações podem executar operações com os Read(Q) Write(Q) Sim
dados em memória entre operações Read e Write Write(Q) Read(Q) Sim
§ Formas de serialização de escalas de execução Write(Q) Write(Q) Sim
§ Serialização de Conflito § Se duas instruções não são conflitantes,
conflitantes, sua ordem
§ Serialização de Visão pode ser trocada na escala

101 102
T1 T2
Serialização Read (Conta);
Write (Conta);
Serialização
§ A escala do slide 99 é Read (Conta); § Serialização de Visão
Write (Conta);
equivalente em conflito Read (Aplic); § As seguintes regras devem ser respeitadas para que
Write (Aplic);
à escala seqüencial duas escalas S e S’ sejam equivalentes em visão
Read (Aplic);
T1 à T2 Write (Aplic); 1. Se na escala S a transação Ti lê o valor inicial de
um dado, o mesmo deve ocorrer na escala S’
T1 T2
2. Se na escala S a transação Ti lê o valor de um
§ A escala do slide 100 Read (Conta);
dado escrito por Tj, o mesmo deve ocorrer em S’
não é equivalente em Read (Conta);
Write (Conta); 3. Se na escala S a transação Ti escreve o valor final
conflito a nenhuma Write(Conta); de Q, o mesmo deve ocorrer em S’
escala seqüencial Read (Aplic);
Write (Aplic);
Read (Aplic);
Write (Aplic);
103 104

Serialização Serialização
§ Escalas serializáveis em conflito são sempre § Equivalência por serialização não é precisa
serializáveis em visão, mas não o contrário § Escalas concorrentes equivalentes a seqüenciais
§ O exemplo abaixo é serializável em visão, mas não é podem não ser serializáveis em conflito nem em visão
serializável em conflito § Neste caso, precisamos analisar todas as operações
§ Isto ocorre sempre que são feitas escritas às cegas T1 T6
(blind writes) Read (Conta);
Conta.Saldo = Conta.Saldo – 200; Bloqueado
Write (Conta);
T3 T4 T5 Read (Aplic);
Read (Conta); Bloqueado Aplic.Saldo = Aplic.Saldo – 100;
Write (Aplic);
Write (Conta); Read (Aplic);
Aplic.Saldo = Aplic.Saldo + 200; Bloqueado
Write (Conta); Write (Aplic);
Write (Conta); Read (Conta);
Bloqueado Conta.Saldo = Conta.Saldo + 100;
Write (Conta);
105 106

Serialização Serialização
§ Teste de serialização com grafo de precedência § Exemplos de teste de serialização de conflito
§ Os vértices são as transações § Grafo da escala do slide 99
T1 T2
§ Os arcos indicam a precedência de ações conflitantes § Serializável em conflito
§ Ti executa Write(Q)
Write(Q) antes de Tj executar Read(Q)
Read(Q) § Grafo da escala do slide 100
§ Ti executa Read(Q)
Read(Q) antes de Tj executar Write(Q)
Write(Q) § Não-
Não-serializável em conflito T1 T2
§ Ti executa Write(Q)
Write(Q) antes de Tj executar Write(Q)
Write(Q) (nem em visão)
§ A escala é serializável em conflito se não houver um § Grafo da escala do slide 106
T3 T4
ciclo com os arcos do grafo § Não-
Não-serializável em conflito
(mas serializável em visão)
Tx Ty Tx Tz T5
§ Teste de serialização de visão
Grafo sem ciclo Grafo com ciclo é mais complexo e oneroso (não-
não-polinomial)
polinomial)
107 108
Serialização Serialização
§ A execução de escalas não serializáveis pode § Serialização em SGBDs
resultar em:
em: § Alguns SGBDs permitem apenas escalas serializáveis
em conflito;
conflito; outros aceitam escalas serializáveis em
§ Dados sujos: uma transação lê valores de dados visão que não são serializáveis em conflito
alterados por outra transação que ainda não foi
§ SGBDs podem ser configurados para aceitar menores
efetivada, e que ainda pode ser abortada níveis de consistência (Ex.: permitir dados sujos)
sujos)
§ Leituras não repetidas: uma transação, ao ler várias § Menores níveis de consistência podem ser tolerados
vezes um mesmo dado, encontra valores diferentes se não for preciso garantir consistência e isolamento
por este estar sendo alterado por outra transação
§ Serialização x Recuperação
§ Tuplas fantasma: uma transação, ao acessar uma § Escalas devem ser recuperáveis,
recuperáveis, preferencialmente
relação, sofre o efeito de outra transação que insere sem a necessidade de recuperação em cascata
ou remove tuplas nesta mesma relação § Quanto maior a concorrência,
concorrência, maior a possibilidade
de termos que fazer recuperação em cascata
109 110

Transações Distribuídas Transações Distribuídas


§ Transações que afetam os dados em apenas um § Falhas em BDs Distribuídos
site são processadas como em BDs centralizados § Além de falhas locais nos sites, podem ocorrer ainda
§ Transações que envolvem mais de um site falhas na comunicação entre estes
precisam ser coordenadas § Tipos de Falhas de Comunicação:
Comunicação:
§ Falha de mensagem:
mensagem: uma mensagem enviada pela
§ As propriedades ACID precisam ser mantidas em rede é perdida,
perdida, corrompida ou duplicada
todas as máquinas envolvidas na transação
§ Falha de desempenho:
desempenho: o atraso na rede faz com
§ Mudança de estado atômica nas várias máquinas que timeout se esgote,
esgote, afetando o funcionamento
§ Todos os sites devem ter dados consistentes rota: um link de rede deixa de operar,
§ Falha de rota: operar,
§ Transações isoladas apesar do paralelismo impedindo a comunicação entre servidores
§ Alterações duráveis em todas as réplicas dos dados

111 112

Transações Distribuídas Transações Distribuídas


§ Rede impede a detecção precisa de falhas § Tratamento de Falhas
§ Quando um servidor não responde,
responde, não é possível § Réplicas dos dados no site com falha deixam de ser
saber se a máquina ou a rede falhou atualizadas e não serão usadas em futuras consultas
§ Particionamento da Rede § Transações ativas no site com falha são abortadas
§ Sites continuam ativos,
ativos, mas não podem se comunicar § Se algum servidor central falhar,
falhar, deve ser eleito um
§ Cada partição acha que a outra falhou novo site para esta função (ex.: servidor de nomes,
nomes,
Rede Particionada concorrência, detector de deadlock)
coordenador de concorrência,
§ Servidor deve ter o estado atualizado ao reintegrar-
reintegrar-se
Partição A Partição B ao sistema;
sistema; qualquer conflito deve ser resolvido

113 114
Transações Distribuídas Transações Distribuídas
§ Coordenação de transações § Papel do coordenador de transações
§ Um coordenador de transações coordena a execução § Iniciar a execução da transação
das transações distribuídas iniciadas por um site § Dividir a transação em sub-
sub-transações
§ Um gerenciador de transações administra em cada sub-transações pelos sites apropriados
§ Distribuir as sub-
site as transações que acessam os dados locais para execução de cada uma delas
§ Fazer a efetivação ou o rollback em todos os sites
Site 1 Site 2 Site 3
§ Papel do gerenciador de transações
Coordenador Coordenador Coordenador
§ Controlar o acesso concorrente aos dados locais de
Gerenciador Gerenciador Gerenciador modo a suportar transações distribuídas
§ Manter um log de operações para permitir a
recuperação de transações distribuídas
115 116

Transações Distribuídas Transações Distribuídas


§ Protocolos de efetivação garantem que todos os § Protocolo de efetivação em três fases (3PC)
sites efetivarão a transação ou nenhum o fará § Tolera até N falhas em 2N+1 sites
§ Protocolo de efetivação em duas fases (2PC) § Fase 1: idêntica à fase 1 do protocolo de duas fases
§ Inicia quando o coordenador recebe mensagens de § Fase 2: o coordenador responde a todos os sites com
todos os sites avisando que terminaram a execução a mensagem precommit se todos indicaram dentro
§ Fase 1: coordenador envia prepare ao gerenciador de do tempo limite que podem efetivar a transação,
transação, ou
cada site participante;
participante; cada gerenciador responde se com abort em caso contrário;
contrário; os sites devem
pode fazer o commit enviando ready ou abort responder com a mensagem ack (reconhecimento)
reconhecimento)
§ Fase 2: coordenador envia commit se todas as § Fase 3: após receber N+1 mensagens ack, o
coordenador manda a mensagem commit a todos os
positivas, ou abort caso receba uma
respostas forem positivas,
resposta negativa ou se o timeout esgotar;
esgotar; cada sites, que ao recebê-
recebê-la efetivam a transação
gerenciador executa a ação correspondente
117 118

Transações Distribuídas Transações Distribuídas


§ Uso de logs nos protocolos de efetivação § Coordenador de backup
§ Mensagens enviadas/recebidas são gravadas em logs § Reside em um site diferente do coordenador
§ Caso o site reinicie após uma falha, ele deve verificar § Recebe as mesmas mensagens que o coordenador
o que ocorreu com as transações registradas no seu § Assume o lugar do coordenador ao detectar sua falha
log que ainda não foram efetivadas ou abortadas
§ Algoritmo de eleição de coordenador
§ Comparação dos protocolos de efetivação § Sites podem pedir para assumir o lugar do
§ Custo de 3PC é mais alto devido ao maior número de coordenador caso detectem que este falhou
mensagens trocadas pela rede
§ Os sites decidem em quem votar em função de seus
§ 2PC pode causar obstrução se o coordenador falhar endereços ou de um identificador do site
§ Soluções possíveis para falha do coordenador § O novo coordenador deve requisitar as mensagens
§ Um coordenador de backup pode assumir o seu lugar registradas nos logs de todos os sites para poder dar
§ Um novo coordenador pode ser eleito pelos sites continuidade às transações em andamento
119 120
Transações Distribuídas Transações Distribuídas
§ Serialização de Transações Distribuídas § Serialização de Transações Distribuídas – Ex.:
§ Serialização deve ser observada não só localmente, § Suponha que X é replicado nos sites A e B, e que as
mas também globalmente quando os dados forem transações T1 e T2 que o alteram estão em execução
replicados para garantir a consistência entre réplicas § A escala abaixo não é serializável,
serializável, pois executa
§ Sem replicação: se cada sub-
sub-transação executada por operações conflitantes em ordem diferente nos sites,
sites,
cada site envolvido na transação for serializável,
serializável, e com isso não mantém a consistência entre réplicas
então a transação completa também é serializável
Site A Site B
§ Com replicação: além de serem serializáveis em cada
T1 T2 T1 T2
site,
site, as instruções conflitantes que envolvem dados Read (X); Read (X);
replicados devem ser executadas na mesma ordem Y = X – 10; X = X * 2;
em cada réplica para manter a consistência Write (X); Write (X);
Read (X); Read (X);
X = X * 2; X = X – 10;
Write (X); Write (X);
121 122

Você também pode gostar