Você está na página 1de 44

Instituto Federal da Bahia – IFBA

Campus Vitória da Conquista

Transação

Prof. Me. Pablo Freire Matos


pablofmatos@gmail.com
Plano de Aula

 Conceitos de gerenciamento de transações

 Necessidade do controle de concorrência

 Estados da Transação

 Propriedades ACID das transações

 Níveis de Isolamento

Transação
2
Tipos de Sistemas

Transação
3
Características

 Disponibilidade

 Tempo de Resposta

 Monousuário x Multiusuário

Transação
4
Transação: Conceito

 É um programa em execução que forma uma


unidade lógica de processamento no banco
de dados, que deve ser concluída por inteiro
para garantir exatidão. (ELMASRI;
NAVATHE, 2011)

Transação
5
Execução Intercalada

tempo

Transação
6
Execução Intercalada

B
A

tempo

Transação
7
Execução Intercalada

B
A A

tempo

Transação
8
Execução Intercalada

B B
A A

tempo

Transação
9
Execução Intercalada

B B
A A

tempo

SBD multiusuário:
- recursos principais: dados armazenados no BD

Transação
10
Transação
 Unidade de execução de um programa que
acessa ou altera o conteúdo do BD
 Sequência de operações de escrita/leitura no BD

 Características:
 é delimitada por declarações da forma begin
transaction e end transaction
 todas as operações de escrita/leitura entre essas
duas declarações são consideradas parte de uma
mesma transação

Transação
11
Transação
 Características:
 um programa de aplicação pode conter mais do que
uma transação, se as operações de escrita/ leitura são
limitadas por diferentes pares de declaração begin
transaction e end transaction

 Observações:
 Transação de leitura (read-only), as operações de BD de
um transação apenas recuperam os dados
 As operações que não sejam leitura/escrita não
apresentam efeito para o BD. Exemplo: soma, subtração
 Os dados do BD estão armazenados em memória
secundária
Transação
12
Operação de Leitura

 Representada por r(x) ou read_item(x)


 Lê o item de dado x na variável de programa
x
 Passos:
 encontrar o endereço do bloco que contém x
 copiar o bloco para o buffer da memória principal
(se necessário)
 copiar o valor de x do buffer para a variável x

Transação
13
Operação de Escrita
 Representada por w(x) ou write_item(x)
 Escreve o valor da variável de programa x no
item de dado x
 Passos:
 encontrar o endereço do bloco que contém x
 copiar o bloco para o buffer da memória principal
(se necessário)
 copiar o valor da variável x para o buffer
 escrever o novo valor do item de dado x no disco
(atualização do BD)
 imediata ou postergada
Transação
14
Duas transações simples
transação 1 transação 2

read_item(x) read_item(x)
x := x - n y := x + n
write_item(x) write_item(y)
read_item(y)
y := y + n
write_item(y)

Transação
15
Observações
 Transações submetidas pelos usuários
 podem executar concorrentemente
 podem acessar e alterar os mesmos itens de
dados

 Execução não controlada


 pode originar problemas
 inconsistência do banco de dados

Transação
16
Necessidade do Controle de
Concorrência

 Problema da Atualização Perdida


 Problema da Leitura Incorreta
 Problema das Somas Incorretas
 Problema da Leitura não Repetida

Transação
17
Problema da Atualização Perdida
transação 1 transação 2
read_item(x)
• T2 lê o valor de x
x := x - n
antes de T1
read_item(x) realizar sua
x := x + m atualização
write_item(x) • o valor atualizado
read_item(y) de x é perdido
write_item(x)
tempo

y := y + n
write_item(y)
Transação
18
Problema da Atualização Perdida
 Ocorre quando duas transações que
acessam os mesmos dados do BD têm suas
operações intercaladas de modo a gerar um
valor incorreto de algum item de dado
 Exemplo prático
 dois programadores escrevem o mesmo
programa ao mesmo tempo
 cada cópia é alterada independentemente
 a cópia 1 substitui a versão original
 a cópia 2 substitui a versão 1
 cópia 1: alterações perdidas
Transação
19
Problema da Leitura Incorreta

transação 1 transação 2
read_item(x)
x := x - n valor de x:
dirty data
write_item(x)
read_item(x)
tempo

x := x + m
write_item(x)
read_item(y) ---- falha a transação

Transação
20
Problema da Leitura Incorreta
 Ocorre quando uma transação primeiro
atualiza o valor de um item de dado do BD e
em seguida falha

 O item de dado alterado é acessado por


outra transação antes de voltar a possuir seu
valor original

Transação
21
Problema das Somas Incorretas
transação 1 transação 2
soma := 0
read_item(x)
soma := soma + x
read_item(y)
soma := soma + y
read_item(x)
x := x + n
write_item(x)
tempo

read_item(z)
soma := soma + z
Transação
22
Problema das Somas Incorretas

 Ocorre quando uma transação está


realizando uma soma de vários itens de
dados, enquanto que outras transações
estão alterando alguns deste itens

 A soma pode utilizar valores dos itens de


dados antes destes serem alterados e depois
destes serem alterados

Transação
23
Problema da Leitura não Repetida

 Ocorre quando uma transação T1 lê itens em


uma determinada condição e depois outra
transação T2 altera e efetiva um novo item
que satisfaz a condição da transação T1

 Caso a transação T1 faça novamente uma


leitura com a mesma condição, os registros
podem aparecer de maneira diferente

Transação
24
Problema da Leitura não Repetida
transação 1 transação 2
read_item(x)
x := x – n
read_item(x)
x := x + m
write_item(x)
read_item(x)
x := x – n
tempo

write_item(x)

Transação
25
Necessidade do Controle de
Restauração
 O SGBD não deverá permitir que algumas das
operações de uma transação T sejam aplicadas ao
banco de dados enquanto as outras operações T não o
forem.

 Tipos de Falhas (transação, sistema ou mídia):


 Computador falhar

 Erro de transação ou sistema

 Falha de disco

 Problemas físicos ou catástrofes

Transação
26
Transição de Estados de uma Transação
reads e writes
Parcialmente
Efetivada Commit
Begin
End
Transaction
Ativa Transaction
Abort
Efetivada

Abort conclusão
da transação
com sucesso
Falha
conclusão
da transação Concluída
sem sucesso
Transação
27
Log do Sistema
1. [start_transaction, T]
2. [escrever_item, T, X, valor_antigo, novo_valor]

3. [ler_item, T, X]
4. [commit, T]
5. [abort, T]
Undo Redo

Log não é afetado por nenhum tipo de falha


exceto falha de disco ou catastrófica
Transação
28
Propriedades ACID
das transações

Atomicidade
Consistência
Isolamento
Durabilidade

Transação
29
Propriedades ACID
 Atomicidade
 uma transação é uma unidade atômica
 todas as operações das transações são
finalizadas e refletidas no BD ou nenhuma delas é
finalizada e refletida

 Consistência
 transformações preservam a consistência do BD
 a execução correta de uma transação leva o BD
de um estado consistente a outro estado
consistente
Transação
30
Consistência
 Estado de um BD
 coleção de todos os valores de itens de dados
armazenados no BD em um determinado
momento
 Estado consistente de um BD
 um estado consistente satisfaz às restrições
especificadas no esquema, assim como
quaisquer outras restrições que existam no BD
 Manter a consistência dos Dados
 tarefa do programador que escreve os módulos
do BD ou do módulo do SGBD que garante as
restrições de integridade impostas pelo sistema
Transação
31
Propriedades ACID
 Isolamento
 transações são isoladas umas das outras
 cada transação assume que está sendo
executada sozinha no sistema, e o SGBD garante
que os resultados intermediários da transação
são escondidos de outras transações executando
concorrentemente
 Durabilidade
 os valores dos dados alterados durante a
execução de uma transação devem persistir após
a finalização desta
Transação
32
Propriedades ACID
protocolos de controle protocolos de
de concorrência recuperação de falhas

garantem a consistência
dos dados através de garantem a consistência
acessos concorrentes dos dados após falhas do
sistema

isolamento
atomicidade e
Transação durabilidade 33
Planos de Execução

 Duas operações em um plano estão em


conflito:
1. Pertencerem a diferentes transações

2. Acessarem o mesmo item X

3. Pelo menos uma das operações ser um


write_item(X)

Transação
34
Quais as operações estão em conflito?
T1 T2
read_item(x)
x := x - n
read_item(x)
x := x + n
write_item(x)
read_item(y)
write_item(x)
tempo

y := y + n
write_item(y)
Transação
35
Planos Seriais
T1 T2 T1 T2
read_item(x) read_item(x)
x := x - n x := x + m
write_item(x) write_item(x)
read_item(y) read_item(x)
y := y + n x := x - n
write_item(y) write_item(x)
read_item(x) read_item(y)
x := x + m y := y + n
tempo

write_item(x) write_item(y)

Transação
36
Plano Não-Serial e Conflito Serializável
T1 T2 T1 T2
read_item(x) read_item(x)
x := x - n x := x - n
read_item(x) write_item(x)
x := x + m read_item(x)
write_item(x) x := x + m
read_item(y) write_item(x)
write_item(x) read_item(y)
y := y + n y := y + n
tempo

write_item(y) write_item(y)

Atualização Perdida
Transação
37
Considerações
 Um plano S é serial porque as operações de cada
transação são executadas consecutivamente, sem
intercalação das operações de outra transação.

 Um plano S com n transações é serializável se ele for


equivalente a algum plano serial com as mesmas n
transações:
 Um plano S não-serial é serializável e é correto, porque ele é
equivalente a um plano serial, que é considerado correto

 Abordagem adotada na prática: determinar métodos que


garantam a serialidade, sem testar os planos
 Técnica mais utilizada é o bloqueio em duas fases (two-phase
locking)
Transação
38
Níveis de Isolamento

Nível de Isolamento
0 Leitura Não Efetivada Read Uncommitted
1 Leitura Efetivada Read Committed
2 Leitura Repetitiva Repeatable Read
3 Serializável Serializable

Transação
39
Níveis de Isolamento (SQL-92)

Transação
40
Níveis de Isolamento (SQL-92)
 Sintaxe SQL
 A configuração do nível de isolamento pode
ocorrer para todas as transações do banco de
dados ou para alguma específica
 SET TRANSACTION
 ISOLATION LEVEL
 [
 READ UNCOMMITTED
 READ COMMITTED *(Padrão)
 REPEATABLE READ
 SERIALIZABLE
 ]
Transação
41
Exercício
transação 1 transação 2
read_item(x) Existe
x := x - 50
problema?
read_item(x)
temp := x * 0,1
x := x - temp
write_item(x)
read_item(y)
write_item(x)
read_item(y)
y := y + 50
tempo

write_item(y)
y := y + temp
write_item(y)
Transação
42
Exercício
 Correlacione os itens ( ) escrita de dados em
da coluna ao lado com posições incorretas do
os três tipos de falhas disco
a seguir: ( ) divisão por zero
( ) bugs no SGBD
1. falha de disco ( ) leitura de um dado
2. falha da transação inexistente
3. falha do sistema ( ) bugs no SO
( ) quebra física do disco

Transação
43
Leitura Recomendada
 ELMASRI, R; NAVATHE, S. B. Sistemas de
Banco de Dados. 4ª ed. São Paulo: Pearson,
2005.
 Capítulo 17: Introdução aos conceitos e à Teoria de
Processamento de Transações

 Exercícios: Páginas 416, 417 e 418

Transação
44

Você também pode gostar