CONTROLE DE
CONCORRÊNCIA
Lílian Simão Oliveira
O que é uma transação?


É qualquer ação que lê ou grava em um banco de
dados
Um banco de dados em estado consistente é
aquele em que são satisfeitas as restrições de
integridade de todos os dados.
Propriedades de uma transação:

Indivisibilidade – exige que todas as operações
(solicitações do SQL) de uma transação estejam
concluídas. Caso contrário, a transação é abortada.
Se uma transação T1 tiver quatro solicitações de
SQL, todas devem ser concluídas com sucesso, senão
a transação inteira é abortada. Em outras palavras,
uma transação é abordada como uma única e
indivisível unidade lógica de trabalho.
Propriedades de uma transação:

Consistência – indica a permanência do estado
consistente do BD. A transação leva o banco de
dados de um estado consistente a outro. Quando
concluída, o banco deve estar em estado
consistente. Se qualquer parte da transação violar
uma restrição de integridade, toda transação é
abortada.
Propriedades de uma transação:

Isolamento – significa que todos os dados utilizados
durante a execução de uma transação não podem ser
utilizados por uma segunda transação até que a
primeira seja concluída. Em outras palavras, se uma
transação T1 estiver sendo executada e utilizar o item
de dado X, esse item não pode ser acessado por
nenhuma outra transação até que o T1 termine. Essa
propriendade é especialmente útil em ambientes de
multiusuário, pois vários usuários podem acessar e
atualizar o banco simultaneamente.
Propriedades de uma transação:

Durabilidade – garante que, uma vez feitas
(consolidadas) alterações pelas transações, elas
não podem ser desfeitas ou perdidas, mesmo em
caso de falhas de sistema.
Propriedades de uma transação:

Ser serializável – garante que o escalonador da
execução atual das transações produza resultados
consistentes. Essa propriendade é importante em BD
distribuídos e de multiusuário, em que várias
transações provavelmente serão executadas de
modo simultâneo. Naturalmente, se apenas uma
transação for executada, a serialização não é
problema.
Gerenciamento de transações com SQL


O suporte a transações é fornecido por dois
comandos de SQL: COMMIT e ROLLBACK
Chegar a um COMMIT, caso em que todas as
alterações são registradas de maneira
permanentemente no banco de dados. Esse
comando encerra automaticamente a transação de
SQL.
Gerenciamento de transações com SQL


Chegar a um ROLLBACK, caso em que todas as
alterações são abordadas e o banco de dados
retorna ao seu estado consistênte anterior.
Chegar com sucesso ao fim do programa, caso em
que todas as alterações são registradas de
maneira permanente no BD. Essa ação equivale a
COMMIT.
Gerenciamento de transações com SQL

O programa seja encerrado de modo anormal,
caso em que todas as alterações feitas no BD são
abordadas e retorne a seu estado consistente
anterior. Essa ação equivale ao ROLLBACK
Log de transação


Armazena todas as transações efetuadas no BD.
As informações armazenadas nesse log são
utilizadas para uma solicitação de recuperação
acionada pelo comando ROLLBACK.
Log de transação

Esse log armazena:
Um registro de início de transação
 Para cada componente de transação

Tipo de operação executada (atualização, exclusão, inserção)
 Nomes dos objetos afetados pela transação (nome da tabela)
 Valores “antes” e “depois” nos campos sendo atualizados
 Ponteiros para as entradas anteriores e posteriores da mesma
transação no log


O fim (COMMIT) da transação
Controle de Concorrência



É a coordenação de execuções simultâneas de
transações em um BD multiusuário
O objetivo: garantir a serialização das transações
nesse tipo de ambiente
Os principais problemas são: atualizações
perdidas, dados não consolidados e recuperações
inconsistentes
Atualizações perdidas

Ocorre quando 2 transações concorrentes T1 e T2,
estão atualizando o mesmo elemento de dados e
uma das atualizações é perdida (sobrescrita por
outra aplicação).
Dados não consolidados

Ocorre quando duas transações, T1 e T2, são
executadas de modo concorrente e a primeira (T1)
é desfeita após a segunda (T2) ter acessado os
dados não consolidados, violando assim a
propriedade de isolamento de transações.
Recuperação inconsistentes


Ocorre quando uma transação acessa dados antes e
após outras transações terminarem de trabalhar com
esses dados.
Por exemplo, esse problema ocorreria se a transação
T1 calcular uma função de sumarização (agregada) de
um conjunto de dados, enquanto outra transação (T2)
estiver atualizando os mesmo dados. O problema é
que a transação pode ler alguns dados antes de serem
alterados e outros após a alteração, produzindo assim,
resultados inconsistentes.
Execução concorrente


É permitido que múltiplas transações sejam executadas
concorrentemente. Vantagens:
- Melhor utilização de processador e discos, levando a
um melhor desempenho do sistema.
- Redução do tempo médio de resposta para transações:
transações curtas não precisam esperar pela execução
de transações longas.
É necessário um esquema de controle de concorrência
Escalonador


É um processo especial do SGBD que estabelece a
ordem em que são executadas as operações de
transações concorrentes.
O escalonador intercala a execução de operações
e bd, garantindo a serialização e o isolamento das
transações.
Exemplo de escalonamento serial (Esc 1)
To
T1
read (A)
A := A – 50
write (A)
read (B)
B := B + 50
write (B)
read (A)
temp :=A * 0.1
A := A – temp
write (A)
read (B)
B := B + temp
write (B)
Escalonameto não serial equivalente a Esc. 1
To
T1
read (A)
A := A – 50
write (A)
Read (A)
temp :=A * 0.1
A := A – temp
write (A)
read (B)
B := B + 50
write (B)
read (B)
B := B + temp
write (B)
Escalonamento que não preserva soma A+B
To
T1
read (A)
A := A – 50
read (A)
temp :=A * 0.1
A := A – temp
write (A)
read (B)
write (A)
read (B)
B := B + 50
write (B)
B := B + temp
write (B)
Seriação



Premissa: cada transação preserva consistência do
banco de dados – então execução serial de
transações preserva consistência.
Um escalonamento (possivelmente concorrente) é
seriável se é equivalente a algum escalonamento
serial. Noções diferentes de equivalência de
escalonamentos:
- Seriação por conflito (mais usada)
- Seriação por visão, por valor, etc.
Consideramos apenas operações read e write.
Seriação por conflito


Operações Oi e Oj de transações Ti e Tj, respectivamente,
conflitam se e somente se existe algum dado D acessado
por Oi e por Oj, e ao menos uma destas operações
escreveu D.
Intuitivamente, um conflito entre operações Oi e Oj força
uma ordem (lógica) temporal entre elas. Se Oi e Oj são
consecutivas em um escalonamento e não conflitam, seus
resultados permaneceriam os mesmos, mesmo que fossem
intercambiadas no escalonamento.
Seriação por conflito (cont.)
1.
Oi é read (D) e Oj é read (D). Oi e Oj não conflitam.
2.
Oi é read (D) e Oj é write (D). Oi e Oj conflitam.
3.
Oi é write (D) e Oj é read (D). Oi e Oj conflitam.
4.
Oi é write (D) e Oj é write (D). Oi e Oj conflitam
Seriação por conflito (cont.)



Se um escalonamento E pode ser transformado em um
escalonamento E’ através da troca de operações não
conflitantes, dizemos que E e E’ são equivalentes por
conflito.
Um escalonamento E é seriável por conflito se E é
equivalente por conflito a um escalonamento serial.
Exemplo de escalonamento que não é seriável por conflito:
T3
T4
read (D)
write (D)
write (D)
Seriação por conflito - Escalonamento Esc. 3 pode ser transformado no
escalonamento serial Esc. 1; Esc 3 é portanto seriável por conflito
Esc. 3
To
Esc. 1
T1
read (A)
write (A)
read (A)
write (A)
read (A)
write (A)
read (B)
write (B)
read (B)
write (B)
read (B)
write(B)
read (A)
write (A)
read (B)
write(B)
Protocolos baseados em locks


Um lock (bloqueio) é um mecanismo para controle de
acessos concorrentes a um mesmo item de dados.
Dados podem ser bloqueados em dois modos:
- Exclusivo (E). Dado pode ser escrito ou lido.
- Compartilhado ( C). Dado pode ser apenas lido
.

Requisições de locks (lock-E ou lock-C) são feitas ao
gerente de controle de concorrência. Transação fica
suspensa até que lock seja concedido.
Deadlock

Considere o escalonamento parcial
T3
lockEx (B)
read(B)
B = B – 50
write(B)
T4
lockCp (A)
read (A)
lockCp (B)
lockEx (A)


Nem T3 nem T4 podem prosseguir. Esta situação é chamada de
deadlock.
Para tratar o deadlock é necessário desfazer T3 ou T4
(rollback), liberando os locks adquiridos.
Protocolo de lock em duas fases



Garante escalonamento seriável por conflito.
Fase 1: Crescimento
 Transação pode requisitar novos locks.
 Transação não pode liberar locks.
Fase 2: Encolhimento
 Transação pode liberar locks.
 Transação não pode requisitar novos locks.
Download

(A) write