Você está na página 1de 39

Banco de Dados I 6 Transaes e Controle de Concorrncia

Grinaldo Lopes de Oliveira (grinaldo@gmail.com) Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

* Material com crditos de colaborao dos professores Mrcio Soussa, Leandro Coelho e Pablo Florentino

Agenda
Aprendendo
Transaes Controle de Concorrncia

Transao

O que uma Transao O termo transao refere-se a uma coleo de operaes que forma uma nica unidade lgica de trabalho.
Por exemplo, uma transferncia de dinheiro de uma conta para outra uma transao consistindo de duas atualizaes, uma para cada conta.

Exemplo de Transao
Transferncia bancria
BEGIN TRANSACTION
update conta1 set saldo = saldo 100 update conta2 set saldo = saldo + 100

COMMIT TRAN

Caractersticas de Transaes

Transaes do SGBD

Finalizao de uma Transao


Commit Transaction
Encerramento da transao com sucesso; Torna as atualizaes permanentes;

Rollback Transaction
Trmino de transao com erro; Retorna o banco de dados posio anterior Transao;
BEGIN TRANSACTION

ROLLBACK TRANSACTION

COMMIT TRANSACTION

O que faz uma transao falhar?

Estados de uma Transao

Propriedades de uma Transao


ACID
A: Atomicidade Unidade lgica atmica (tudo ou nada) C: Consistncia (Preservao) Ao final de uma transao o banco continua consistente I: Isolamento A execuo de uma transao no deve sofrer interferncia de outras transaes concorrentes D: Durabilidade (Persistncia) Aps o ponto de confirmao, as alteraes devem persistir no banco de dados

Arquitetura de um SGBD Re er!n"ia


Respostas Comandos da Aplicao /usurio/ DBA Compilador Otimizador Catlogo do Sistema

Gerente de Transaes Gerente de logs Gerente de acesso a dados Gerente de buffers

Gerente de bloqueios

LOG

BD

o! de Transaes
Caractersticas: Registro de todas as operaes (alteraes) realizadas no banco de dados; Base para o processo de recuperao (Recovery) Atualizao anterior operao realizada sobre os dados; Atualizao fsica (I/O), sem utilizao de buffers.

SGBD

rea de Dados

Log de Transaes

"ecu#erao de Consist$ncia %&alha de Sistema' Processo de Recuperao


Tempo T1 T2 T3 T4 T5 TC (Checkpoint) TF (Falha do Sistema)

T1 T2 e T4 T3 e T5

Nada a fazer Ser refeitas (R !") Ser desfeitas (#N!")

Checkpoint$ Atualizao fsica dos buffers do SGBD.

"ecu#erao de Consist$ncia %&alha de Sistema'


Processo de Recovery Iniciamos o algoritmo com duas listas (Undo e Redo). Undo com a lista das transaes no momento do ltimo checkpoint e Redo vazia; Pesquisamos no log de transaes a partir do registro de checkpoint; Se um Begin Transaction for encontrado, adicionamos a transao lista Undo; Se um Commit for encontrado, move a transao da lista Undo para a Redo;
Refazer as transa%&es !esfazer as transa%&es For'ard Reco(er) *ack'ard Reco(er)

Transao Distri(uda
Two-Phase Commit
Protocolo para garantir o conceito de transao entre servidores distintos (Transao inter-servidores); Opo de efetivar ou cancelar a transao cabe a um Coordenador:
FASE1: O coordenador instrui todos os participantes para estarem prontos para efetivar a transao. (Forar a gravao dos registros de log envolvidos na transao). Os participantes devem responder Ok ou No Ok caso tenham conseguido ou no se preparar; FASE2: Se todas as respostas forem OK, o coordenador deve transmitir um Commit a todos os participantes, caso contrrio emite Rollback (algum No Ok).

Controle de Concorrncia

)ro(lemas de Concorr$ncia
Atualizao Perdida:
A Transao 1 perde a atualizao no tempo T4.
Transa%+o 1
Select , Tempo T1 T2 #pdate , T3 T4 #pdate , Select ,

Transa%+o 2

)ro(lemas de Concorr$ncia
Dependncia de Transao no Concluda:
A Transao 1 tem acesso um dado que depende da concluso da Transao 2.
Transa%+o 1
Tempo T1 Select , T2 T3 Roll-ack

Transa%+o 2
#pdate ,

)ro(lemas de Concorr$ncia
Anlise Inconsistente:
Transa%+o 1 Acc1 = 40 Acc2 = 0 Acc! = !0 Soma . 12/
Select 0cc1 Soma . 4/ Select 0cc2 Soma . 1/ Tempo

Transa%+o 2

T1 Select 0cc3 #pdate 0cc3.2/

T2

T3

Select 0cc1 #pdate 0cc1.5/ Commit

rro

Select 0cc3

Soma . 11/

T4

#ontrole de #on"orr!n"ia Primiti$a


Princpio da correo Toda transao, se executada de forma isolada, transformar qualquer estado consistente em outro estado consistente.

#ontrole de #on"orr!n"ia Es"alonador %S"&eduler'


Escalonador : Tem como funo assegurar que as transaes preservem a consistncia quando executadas simultaneamente.
T1: Update T2: InsertSelect Gerenciador de Transaes Solicitaes de leitura e grava o Escalonador (Scheduler) !u""ers de #e$%ria

#ontrole de #on"orr!n"ia Es"alonamento


Serializao (Serializabilidade, Seriabilizao) Requisito abstrato que tem como objetivo assegurar que as transaes executem de forma concorrente e ao final o estado do banco continue consistente. Escalonamento Serializvel: Quando seu efeito sobre o estado do banco de dados igual ao de algum escalonamento serial. Escalonamento no-serializvel: Escalonamento que no assegura o estado consistente do banco de dados

#ontrole de #on"orr!n"ia Bloqueios


Como os SGBDs impem a serializao ? A tcnica mais comum adotada a utilizao de bloqueios sobre elementos do banco de dados, a fim de evitar um comportamento no serializvel. (Pessimista) Uma transao obtm bloqueios sobre os elementos do banco de dados para impedir que outras transaes acessem esses elementos ao mesmo tempo e, portanto, haja risco da no serializao. utilizada uma tabela de bloqueios H outras tcnicas: Timbre de hora Timestamp Tcnicas otimistas- Entendem que operaes conflitantes so exceo

Bloqueios
Definio:
Mecanismo que permite a uma transao impedir que outras acessem ou atualizem registros de forma a evitar os problemas de concorrncia;

XLOCK:
Bloqueio exclusivo sobre os registros; Utilizado para atualizaes;

SLOCK:
Bloqueio compartilhado sobre os registros; Utilizado para consultas.

Bloqueios
Relao entre os Bloqueios:
XLOCK XLOCK SLOCK No No SLOCK No Sim

#ontrole de #on"orr!n"ia Bloqueios


Granularidade dos bloqueios
Linha (registros) Pgina de disco Tabela Banco de Dados

O SGBD decide automaticamente o melhor nvel de granularidade (Bloqueio de mltipla granularidade). Alguns SGBDs permitem que o usurio altere a granularidade e o tipo do bloqueio.

"esoluo dos )ro(lemas de Concorr$ncia


Atualizao Perdida:
Transa%+o 1
Select , (SLOCK) Tempo T1 T2 #pdate , (Solic. XLOCK) WAIT WAIT ... T3 #pdate , (Solic. XLOCK) WAIT ... Select , (SLOCK)

Transa%+o 2

T4

"esoluo dos )ro(lemas de Concorr$ncia


Dependncia de Transao no Concluda:
Transa%+o 1
Tempo T1 Select , (Solic. SLOCK) WAIT WAIT

Transa%+o 2
#pdate , (XLOCK)

T2 Commit2Roll-ack (Libera XLOCK)

T3

Cont3 Select , (SLOCK)

T4

"esoluo dos )ro(lemas de Concorr$ncia


Anlise Inconsistente:
Transa%+o 1
Select 0cc1 4 Soma . 4/ (SLOCK) Select 0cc2 4 Soma . 1/ (SLOCK) Tempo T1 T2 Select 0cc3 (SLOCK) #pdate 0cc3.2/ (XLOCK)

Transa%+o 2

T3

Select 0cc3 (Solic. SLOCK) WAIT ...

T4

Select 0cc1 (SLOCK) #pdate 0cc1.5/ (Solic. XLOCK) WAIT WAIT ...

"esoluo dos )ro(lemas de Concorr$ncia

Deadlock
Situao onde duas transaes esto simultaneamente em estado de espera (Wait), cada uma aguardando pela liberao do bloqueio (Lock) da outra; O SGBD deve detectar e quebrar o deadlock (sacrificar uma transao); Grfico de Espera (Wait-For Graph);
T1
R3 R1

T2
R2

T3

#ontrole de #on"orr!n"ia Pro(lemas de #on"orr!n"ia


Problemas clssicos de concorrncia Atualizao perdida (Lost Update) Leitura suja (Dirty read) Leitura no-repetitiva (Repeatable-read) Fantasmas (Phantoms)

#ontrole de #on"orr!n"ia Pro(lemas de #on"orr!n"ia


Atualizao perdida (Lost Update) Ocorre quando duas transaes que acessam os mesmos itens do banco de dados tm suas operaes entrelaadas, de modo que torne incorreto o valor de algum item. Leitura Suja (Dirty read) Ocorre quando uma transao atualiza um item do banco de dados e, por algum motivo, outra transao ler esse item supostamente atualizado.

#ontrole de #on"orr!n"ia Pro(lemas de #on"orr!n"ia


Leitura No Repetitiva (Non-Repeatable read) Ocorre quando uma transao l itens em uma determinada condio e depois outra transao altera e efetiva um novo item que satisfaz a condio da transao anterior. Caso a primeira transao faa novamente uma leitura com a mesma condio, os registros podem aparecer de maneira diferente. Fantasmas (Phantoms) Ocorre quando uma transao l itens em uma determinada condio e depois outra transao insere e efetiva um novo item que satisfaz a condio da transao anterior. Caso a primeira transao faa novamente uma leitura com a mesma condio, um registro fantasma ir aparecer

#ontrole de #on"orr!n"ia )*$eis de +solamento %Padro S,-./0'


Read uncommitted Permite a leitura de dados no efetivados H ganho de performance, mas perda de segurana. Read committed Nvel de isolamento Padro Leitura s pode ser feita em dados efetivados. Repeatable Read Registros lidos no sero alterados por outros processos, garantindo releituras idnticas. Serializable A mais restrita de todas. Inseres ou delees no podem ser feitas em conjuntos de registros lidos.

*+eis de ,solamento %S- ./0'


Nvel de Isolamento Read Uncommitted Read Committed Repeatable Read Serializable Leitura Suja (Dirty Read) Ocorre Leitura no Repetvel (Nonrepeatable Read) Ocorre Registro Fantasma (Phantom) Ocorre

No ocorre

Ocorre

Ocorre

No ocorre

No ocorre

Ocorre

No ocorre

No ocorre

No ocorre

#ontrole de #on"orr!n"ia )*$eis de +solamento %Padro S,-./0'


Sintaxe SQL A configurao do nvel de isolamento pode ocorrer para todas a transaes do banco de dados ou para alguma especfica. SET TRANSACTION ISOLATION LEVEL [ READ UNCOMMITTED ou READ COMMITTED *(Padro) REPEATABLE READ SERIALIZABLE ]

De(ate em Sala de 1ula


Uma aplicao est com baixo tempo de resposta em virtude de muitas transaes concorrentes e alto grau de bloqueios. O que voc faria para minimizar este problema?

Banco de Dados I
6 Transaes e Controle de Concorrncia
Grinaldo Lopes de Oliveira (grinaldo@gmail.com) Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Você também pode gostar