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.
Protocolos baseados em locks (cont.)

Matriz de compatibilidade de locks:
C
E


C
Verdadeiro
Falso
E
Falso
Falso
Pode ser concedido um lock de um dado a uma transação
se o lock solicitado é compatível com locks adquiridos por
outras transações para o mesmo dado.
Se o lock não pode ser concedido, a transação que requer
o lock é suspensa até que todos os outros locks
incompatíveis sejam liberados pelas outras transações.
Protocolos baseados em locks (cont.)

Exemplo de transação com locks:
T1
lock-C (A)
read (A)
unlock(A);
lock-C (B)
read (B)
unlock (B)
display (A+B)
Escalonamento que não preserva a Soma (A+B)
T7
T8
lock-X (B)
read (B)
B := B – 50
write (B)
unlock (B)
lock-S (A)
read (A)
unlock (A)
lock-S (B)
read (B)
unlock (B)
display (A + B)
lock-X (A)
read (A)
A :=A + 50
write (A)
unlock (A)
Protocolos baseados em locks (cont.)

Locks usados como o exemplo anterior não
garantem seriação: se A e B forem utilizados entre
as leituras de A e B, a soma mostrada estaria
errada
Protocolos baseados em locks (cont.)



Um protocolo para locks é um conjunto de regras que todas as
transações devem seguir para requisitar e devolver locks.
Os protocolos restringem o conjunto de escalonamento
possíveis.
Problemas que devem ser contornados:
 Deadlock
 Falta de garantia de progresso (starvation, liveleness)
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.
Protocolo de lock em duas fases (cont.)

O protocolo garante seriação

O protocolo não garante inexistência de deadlocks


Protocolo de duas fases estrito – Transação deve manter
locks exclusivos até compromissar
Protocolo de duas fases rigoroso – Todos os locks devem
ser mantidos. Transações podem ser seriadas na ordem em
que são compromissadas
Conversão de locks



Protocolo de lock em duas dases com conversão:
Fase 1:
 Pode requisitar lockCp sobre dado.
 Pode requisitar lockEx sobre dado.
 Pode converter lockCp em lockEx.
Fase 2:
Pode liberar lock-Cp.
 Pode liberar lock-Ex.
 Pode converter lockEx em lockCp

Implementação de Isolamento



Escalonamento devem ser seriáveis e recuperáveis (para
manter consistência).
Esquema que permite que apenas uma transação execute
por vez gera escalonamentos seriais, mas é extremamente
ineficiente.
Esquemas de controle de concorrência são um compromisso
entre grau de concorrência permitido e custo de execução
(overhead).
Níveis de Isolamento em SQL Server




Uncomitted Read – permite que a transação leia
todos os dados que estiverem atualmente em uma
página de dados, efetivados ou não.
Esta opção abandona as garantias de ter dados
fortemente coerentes para que possa ter a
vantagem de uma alta concorrência no sistema
Indicado para certas na análises de apoio à
decisão
set transaction isolation level uncommitted read
Níveis de Isolamento em SQL Server


Commited Read – apenas registros
compromissados podem ser lidos, mas leituras
repetidas podem retornar valores diferentes.
Os bloqueios de compartilhamento podem ser
liberados depois que os dados tiverem sidos
enviados para o cliente que fez a chamada

Nível de isolamento padrão do SQL Server

set transaction isolation level committed read
Níveis de Isolamento em SQL Server

Repeatable Read - apenas registros compromissados
podem ser lidos, leituras repetidas devem retornar mesmo
valor.



Executar a mesma consulta duas vezes dentro de uma
transação não pegará quaisquer alterações realizadas nos
valores dos dados pela transação de outro usuário
Todos os bloqueios compartilhados devem ser mantidos até
o final da transação
set transaction isolation level committed read
Níveis de Isolamento em SQL Server





Serializable – aumenta as propriedades de
Repeatable Read
Todos os bloqueios compartilhados devem ser mantidos até
o final da transação
Utiliza bloqueio de intervalo de índices para que
as leituras retornem sempre os mesmos resultados
Este nível recebe este nome pelo fato de que
executar várias transações que podem ser
colocadas em série simultaneamente é equivalente
a executá-las uma por vez, em qualquer ordem
set transaction isolation level serealizable
Download

Controle de concorrência