Sei sulla pagina 1di 51

Mdulo I: Processamento

de Transaes
(Aulas 1 e 2)

Clodis Boscarioli

Agenda:
Introduo:
Apresentao da disciplina; Leitura do Plano de Ensino;

Conceito de transao; Estados de uma transao; Teoria de Serializao:


Serializao de conflito; Serializao de viso.

Viso Geral de um SGBD


Processador de consultas

Usurios navegantes

Programadores Usurios Administrade aplicaes sofisticados dores de BD Consultas (queries)

Usurios

Interface com Programas de aplicaes aplicaes

Esquema de Banco de Dados

Programas de aplicaes em cdigo objeto

Pr-compilador de comandos DML

Compilador DML

Interpretador DDL

SGBD
Gerenciador de memria

Componentes de execuo de consultas Gerenciador de transaes Gerenciador de buffer Gerenciador de arquivos

Armazenamento em disco

ndices Arquivos de dados

Dados estatsticos Dicionrio de dados

BD

Justificativa
Um dos critrios de classificao para SGBDs em relao ao nmero de usurios que podem us-los ao mesmo tempo:
Monousurio: apenas um usurio pode utilizar o sistema em um momento;
Sistemas de BD que so projetados para uso em um micro-computador;

Multiusurio: vrios usurios podem utilizar o sistema em um momento.


Sistemas de reserva de passagens areas; Sistemas bancrios/financeiros; Sistemas de venda para WEB.

Neste contexto, insere-se o conceito de multiprogramao. permitida a existncia de SGBDs multiusurios porque possibilita-se a execuo de vrios programas ao mesmo tempo.
Na realidade, se existe apenas uma CPU, ento parte dos programas so intercalados na execuo e, a cada unidade de tempo, um programa apenas executado; Comandos de um programa so executados e ento o programa suspenso para que comandos de um outro programa sejam executados.

Uma nica CPU B

C CPU2 D CPU1

t1

tn

t1 tempo

tn

Em SGBDs os dados do BD so os recursos primrios que podem ser lidos/ recuperados e modificados. A execuo de um programa de acesso e/ou modificao ao contedo do BD chamado de transao.

Transaes
Um conjunto de vrias operao em um BD pode ser visto pelo usurio como uma nica unidade. Exemplo:
A transferncia de fundos de uma conta corrente pra uma conta poupana uma operao nica do ponto de vista do cliente, porm, dentro do sistemas de banco de dados, ela envolve vrias operaes.

essencial que todo o conjunto de operaes seja concludo, ou que, no caso de uma falha, nenhuma delas ocorra. Essas operaes, que formam uma nica unidade lgica de trabalho so chamadas de transaes. Um SGBD precisa:
Garantir que a execuo da transao seja completa; Administrar a execuo simultnea de vrias transaes evitando inconsistncias;
Uma transao que calcula o total de dinheiro do cliente poderia trabalhar com o saldo da conta corrente antes do dbito feito pela transao de transferncia e, tambm, verificar o saldo da poupana depois do crdito. Com isso, obteria um resultado incorreto.

Operaes de Leitura/Escrita
As operaes de acesso ao BD que uma transao pode fazer so:
read(x): que transfere o item de dados x do BD para um buffer local alocado transao que executou a operao de read. O valor de x colocado dentro de uma varivel de programa. write(x): que transfere o item de dados x do buffer local da transao que executou o write de volta para o BD. O valor da varivel de programa passado para o item de dado no BD. OBS.: para fins de simplificao, o item de dados e a varivel de programa correspondente sero representados da mesma forma, x.

Execuo das Operaes


Executar read(x):
Encontrar o endereo do bloco de disco que contm x; Copiar este bloco de disco para dentro do buffer/memria principal, se ele j no estiver l; Copiar o item x do buffer para a varivel de programa.

Executar write(x):
Encontrar o endereo do bloco de disco que contm x; Copiar o bloco de disco para a memria principal se ele j no estiver l; Copiar o item x da varivel de programa x para a localizao correta no buffer; Copiar o bloco alterado do buffer de volta para o disco (imediatamente ou mais tarde).

Exemplo de Transao
A) read(x); x := x N; write(x); read(y); y := y + N; write(y);
T1
Acesso concorrente ao dado x.

B) read(x); x := x + M; write(x);

T2

Outro Exemplo
Seja T1 uma transao que transfere 50 reais da conta A para a conta B. Essa transao pode ser definida como: T1: read(A); A := A - 50; write(A); read(B); B := B + 50; write(B);

Propriedades das Transaes (ACID)


A Atomicidade: ou todas as operaes da transao so refletidas corretamente no banco de dados ou nenhuma o ser.
Suponha que, durante a execuo da transao Ti, uma falha acontea impedindo Ti de se completar com sucesso (uma queda de energia). Suponha ainda que a falha tenha ocorrido depois da execuo da operao write(A), mas antes da operao write(B). O que acontece? O estado do sistema no reflete mais um estado real do mundo que se supe representado no BD. um estado inconsistente. Estes estados no podem ser perceptveis. Ou seja, estados inconsistente s so permitidos no momento de execuo da transao, onde o usurio no ter qualquer tipo de acesso aos dados. Assegurar a atomicidade de uma transao responsabilidade do SGBD, mais especificamente, do Componente de Gerenciamento de Transaes e Recuperador de Falhas.

Propriedades das transaes (ACID)


C - Consistncia: a execuo de uma transao isolada (ou seja, sem a execuo concorrente de outra transao) preserva a consistncia do banco de dados.
A exigncia da consistncia aqui significa que a soma de A com B deve permanecer inalterada aps a execuo da transao. Se o banco de dados est consistente antes de uma execuo de transao, o banco de dados permanece consistente aps a execuo da transao. Responsabilidade do programador.

Propriedades das transaes (ACID)


I Isolamento: embora diversas transaes possam ser executadas de forma concorrente, o sistema garante que, para todo par de transaes Ti e Tj, Ti tem a sensao de que Tj terminou sua execuo antes de Ti comear, ou vice-versa. Cada transao no toma conhecimento de outras transaes concorrentes a ela no sistema.
A execuo concorrente de vrias transaes implica no intercalamento de suas operaes. Se este intercalamento feito de forma inconveniente, inconsistncias sero geradas. No exemplo dado, se uma transao concorrente ler o valor de A antes dele ser escrito mais depois do processamento A-50 ter sido feito, ela estar lendo um valor inconsistente. Execues em srie resolvem este problema mas a concorrncia benfica por causa do tempo de execuo (melhora do desempenho). Assegurar o isolamento de responsabilidade do Controlador de Concorrncia.

Propriedades das transaes (ACID)


D Durabilidade: depois da transao completar-se com sucesso, as mudanas que ela faz no banco de dados persistem, at mesmo se houver falhas no sistema.
No exemplo dado, se a transao se completar com sucesso e o usurio que a disparou for notificado da transferncia de fundos, isso significa que no houve nenhuma falha de sistema que tenha resultado em perda de dados relativa a essa transferncia. Assegurar a durabilidade responsabilidade do componente do SGBD chamado de Recuperador de Falhas.

Operaes Adicionais
Uma transao uma unidade de trabalho atmica que completada em sua totalidade ou nada dela deve ter efeito. Para tornar isso possvel, as seguintes operaes so necessrias:
Begin-transaction: Denota o incio da execuo da transao; End-transaction: Especifica que as operaes da transao terminaram e marca o limite final da execuo da transao. Neste ponto necessrio verificar se o COMMIT ou o ABORT so necessrios, caso j no tenham sido explicitados; Commit-transaction: Sinal de trmino com sucesso e que as alteraes podem ser permanentemente gravadas no BD; Rollback (abort-transaction): Assinala que a transao no terminou com sucesso e que seus efeitos devem ser desfeitos; Undo: Desfaz uma operao; Redo: Refaz uma operao.

Exemplo com Operadores (1)


Procedure Transfer; begin start; (begin transaction) input (FROMaccount, TOaccount, amount); temp := read(Accounts[FROMaccount]); if temp < amount then begin output(insufficient funds); Abort; end else begin write(Accounts[FROMaccount],temp - amount); temp = read(Accounts[TOaccount]); write(Accounts[TOaccount], temp + amount); commit; output(transfer complete); end; return; (end transaction) end.

Exemplo com Operadores (2)


begin transaction update TABELA1 set CAMPO1 = NOVO VALOR where CAMPO2 = 35 if @@ERROR <> 0 rollback else commit end transaction Suponha uma tabela que possua 6000 tuplas que satisfaam a condio e que na tupla 4666 houve uma falha no sistema. Neste caso, a varivel chamada @@ERROR guardar o cdigo do erro, o comando ROLLBACK ser executado e as 4666 tuplas j atualizadas sero automaticamente voltadas a seu estado anterior. Ao contrrio, se tudo correr bem, o comando COMMIT ser executado e todas as 6000 tuplas sero atualizadas com xito.

Estados de uma Transao


Read/Write

Begin Transaction Ativa

End Transaction Em efetivao parcial

Efetivada

Abort

Abort

Em falha Diagrama de transio de estados para a execuo da transao.

Completa Com sucesso ou com falha.

Consideraes
Uma transao entra no estado de falha quando o sistema determina que ela j no pode prosseguir sua execuo normal. Essa transao deve ser desfeita e entra no estado de abortada. Nesse momento o sistema tem duas opes:
Reiniciar a transao: somente se ela foi abortada como resultado de algum erro de hardware ou de software no criado pela lgica interna da transao. Uma transao reiniciada considerada uma transao nova. Matar a transao: normalmente, isto feito em decorrncia de algum erro lgico interno e s pode ser corrigido refazendo o programa de aplicao. Esse erro d-se ou porque a entrada de dados no era adequada ou porque os dados desejados no foram encontrados no banco de dados.

Consideraes
Escritas externas observveis (escrever em um terminal ou em uma impressora):
Uma escrita desse tipo no pode ser apagada j que vista externamente ao sistema de banco de dados. Geralmente somente so permitidas aps a transao ser efetivada.

Execuo Concorrente
Permitir que mltiplas transaes concorram na atualizao de dados traz diversas complicaes em relao consistncia desses dados. Razes para permitir a concorrncia:
Uma transao consiste em diversos passos. Alguns envolvem atividades de I/O, outros atividades de CPU. A CPU e os discos podem operar em paralelo. Logo, a atividade de I/O pode ser feita em paralelo com o processamento na CPU, por meio das execues paralelas das transaes. Enquanto uma leitura ou escrita solicitada por uma transao est em desenvolvimento em um disco, outra transao pode ser processada na CPU, e outro disco pode estar executando uma leitura ou escrita solicitada por uma terceira transao. Assim aumenta-se o rendimento do sistema, ou seja, o nmero de transaes que podem ser executadas em um determinado tempo. Pode haver uma mistura de transaes em execuo simultnea no sistema, algumas curtas e outras longas. Se a execuo das transaes for seqencial, uma transao curta pode ser obrigada a esperar at que uma transao longa precedente se complete. Com a concorrncia reduz-se o tempo mdio de resposta, ou seja, o tempo mdio para uma transao ser concluda aps sua submisso.

Execuo Concorrente
Sejam T1 e T2 duas transaes que transferem fundos de uma conta para outra. A transao T1 transfere 50 dlares da conta A para a conta B. A transao T2 transfere 10 por cento do saldo da conta A para a conta B.

Execuo Concorrente
T1: read(A); A := A 50; write(A); read(B); B := B + 50; write(B); T2: read(A); temp := A * 0,1; A := A temp; write(A); read(B); B := B + temp; write(B);

Execuo Seqencial
Escalas de execuo em seqncia: Observe que o estado do BD sempre consistente. 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); read(A); A := A 50; write(A); read(B); B := B + 50; write(B); T2 T1 T2 read(A); temp := A * 0,1; A := A temp; write(A); read(B); B := B + temp; write(B);

Execuo Concorrente
Correta 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); write(A); read(B); B := B + 50; write(B); read(B); B := B + temp; write(B); T2 T1 read(A); A := A 50; read(A); temp := A * 0,1; A := A temp; write(A); Incorreta T2

Problemas na Concorrncia
Problema de alteraes perdidas; Problema de alterao temporria; Problema do resumo incorreto.

Problema de Alteraes Perdidas


Ocorre quando duas transaes que acessam o mesmo item de BD possuem suas operaes intercaladas de uma maneira que o valor de algum item de dado fique incorreto.
T1 read(x); x := x - N; read(x) x := x + M; write(x); read(y); write(x) y := y + N; write(y) T2

Problema de Alterao Temporria


Ocorre quando uma transao altera um item de dados e depois ela falha por alguma razo. O item de dado acessado por outra transao antes que o valor original seja estabelecido.
T1 read(x); x := x - N; write(x); read(x) x := x + M; write(x) read(y); falha T2

Problema de Resumo Incorreto


Se uma transao est calculando uma funo agregada com um conjunto de tuplas e outras transaes esto alterando algumas destas tuplas, a funo agregada pode calcular alguns valores antes deles serem alterados e outros depois de serem alterados.
T1 T3 sum := 0; read(a); sum : sum + a; read(x); x := x - N; write(x);

read(x) sum := sum + x; read(y); sum := sum + y;

read(y); y := y + N; write(y)

Serializao (Seriao)
O sistema de banco de dados deve controlar a execuo concorrente de transaes para assegurar que o estado do BD permanea consistente. A consistncia do banco de dados, sob execuo concorrente, pode ser assegurada por meio da garantia de que qualquer escala executada tenha o mesmo efeito de outra que tivesse sido executada sem qualquer concorrncia. Isto , uma escala de execuo deve, de alguma forma, ser equivalente a uma escala seqencial. Formas de equivalncia entre escalas de execuo podem ser verificadas sob dois prismas:
Por conflito; Por viso.

Serializao de Conflito
Considere uma escala de execuo S com duas intrues sucessivas, Ii e Ij, das transaes Ti e Tj (i <> j), respectivamente. Se Ii e Ij referem-se a itens de dados diferentes, ento permitido alternar Ii e Ij sem afetar os resultados de qualquer instruo da escala. Se Ii e Ij referem-se ao mesmo item de dado Q, ento a ordem dos dois passos pode importar.

Serializao de Conflito
1. Ii = read(Q) e Ij = read(Q)
A seqncia de execuo de Ii e Ij no importa, j que o mesmo valor de Q lido por Ti e Tj, independentemente da ordem destas operaes.

2. Ii = read(Q) e Ij = write(Q)
Se Ii vier antes de Ij, ento Ti no l o valor de Q que escrito por Tj na instruo Ij. Se Ij vier antes de Ii, ento Ti l o valor de Q que escrito por Tj. Assim, a ordem de Ii e Ij importa.

Serializao de Conflito
3. Ii = write(Q) e Ij = read(Q) A ordem de Ii e Ij importa por razes semelhantes s do caso anterior. 4. Ii = write(Q) e Ij = write(Q) Como ambas as instrues so operaes de escrita, a ordem dessas instrues no afeta Ti ou Tj. Entretanto, o valor obtido pela prxima instruo read(Q) em S afetado, j que somente o resultado da ltima das duas instrues write(Q) preservado no banco de dados. Se no houver nenhuma outra instruo de write(Q) depois de Ii e Ij em S, ento a ordem de Ii e Ij afeta diretamente o valor final de Q no que se refere ao estado do banco de dados aps a execuo da escala S.

Serializao de Conflito
Diz-se que duas instrues entram em conflito se elas so operaes pertencentes a transaes diferentes, agindo no mesmo item de dado, e pelo menos uma dessas instrues uma operao de escrita.
T1 read(A) write(A) read(A) write(A) read(B) write(B) read(B) write(B) T2 A instruo write(A) de T1 entra em conflito com a instruo read(A) de T2. Porm, a instruo write(A) e T2 no est em conflito com a instruo read(B) de T1.

Serializao de Conflito
Seja Ii e Ij instrues consecutivas de uma escala de execuo S. Se Ii e Ij so instrues de transaes diferentes e no entram em conflito, ento podemos trocar a ordem de Ii e Ij para produzir uma nova escala de execuo S. Diz-se que S e S so equivalentes j que todas as instrues aparecem na mesma ordem em ambas as escalas de execuo com exceo de Ii e Ij, cuja ordem no importa.

Serializao de Conflito
Ainda segundo a escala S, a instruo write(A) de T2 no entra em conflito com a instruo read(B) de T1. Ento, permitido mudar a ordem dessas instrues para gerar uma escala de execuo equivalente.
T1 read(A) write(A) read(A) read(B) write(B) read(B) write(B) write(A) T2 Em relao a um mesmo estado inicial do sistema, ambas as escalas (S e esta) produzem o mesmo estado final no sistema.

Serializao de Conflito
Se as seguintes trocas de instrues no-conflitantes forem feitas:
read(B) de T1 por read(A) de T2; write(B) de T1 por write(A) de T2; write(B) de T1 por read(A) de T2.

... uma escala com execues seriais ser obtida. Assim mostrou-se que a escala S equivalente, por conflito, a uma escala seqencial. Essa equivalncia garante que para um mesmo estado inicial do sistema, a escala S produzir o mesmo estado final produzido por essa escala seqencial.

Serializao de Conflito
Se uma escala de execuo S puder ser transformada em outra, S, por uma srie de trocas de instrues noconflitantes, dizemos que S e S so equivalentes por conflito. O conceito de equivalncia por conflito leva ao conceito de serializao por conflito. Uma escala de execuo S serializvel por conflito se ela equivalente por conflito a uma escala de execuo seqencial.

Serializao de Conflito
A escala abaixo no serializvel por conflito pois no equivalente em conflito nem escala seqencial <T3,T4> nem <T4,T3>.
T3 read(A) write(A) write(A) T4

Serializao de Conflito
A escala abaixo no serializvel por conflito, mas produz o mesmo resultado que uma escala seqencial. Confira.
T1 read(A); A := A 50; write(A); read(B); B := B 10; write(B); T2

read(B); B := B + 50; write(B); read(A); A := A + 10; write(A);

Teste de Serializao de Conflito


Seja S uma escala. Para saber se ela serializvel em relao s operaes conflitantes necessrio criar um grafo de precedncia para S. G = (V,E) em que V um conjunto de vrtices e E um conjunto de arestas.
O conjunto de vrtices composto por todas as transaes que participam da escala. O conjunto de arestas consiste em todas as arestas Ti as quais uma das seguintes condies verdadeira:
Ti executa write(Q) antes de Tj executar read(Q); Ti executa read(Q) antes de Tj executar write(Q); Ti executa write(Q) antes de Tj executar write(Q);

Tj para

Teste de Serializao de Conflito


Se existir uma aresta Ti Tj no grafo de precedncia, ento, em qualquer escala seqencial S equivalente a S, Ti deve aparecer antes de Tj. Exemplo:
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);

T2

T1

T2

Teste de Serializao de Conflito


Exemplo:
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) Ciclo no grafo: Se o grafo de precedncia possui ciclo, ento a escala S no serializvel por conflito. A ordem de serializao pode ser obtida por meio da classificao topolgica, que estabelece uma ordem linear para a escala consistente com a ordem parcial do grafo de precedncia. T2 T1 T2

Serializao de Viso
Trata-se de uma forma de equivalncia menos restritiva que a equivalncia de conflito. Considere duas escalas de execuo S e S, com o mesmo conjunto de transaes participando de ambas. As escalas S e S so ditas equivalentes por viso se as trs condies seguintes forem satisfeitas:
Para cada item de dado Q, se a transao Ti fizer uma leitura no valor inicial de Q na escala S, ento a transao Ti tambm deve, na escala S, ler o valor inicial de Q; Para cada item de dado Q, se a transao Ti executar um read(Q) na escala S, e aquele valor foi produzido por meio da transao Tj (se houver), ento a transao Ti tambm dever, na escala S, ler o valor de Q que foi produzido por meio da transao Tj; Para cada item de dado Q, a transao (se houver) que executa a operao final de write(Q) na escala S tem de executar a operao de write(Q) final na escala S;

Serializao de Viso
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); read(A); A := A 50; write(A); read(B); B := B + 50; write(B);

T2

T1

T2
read(A); temp := A * 0,1; A := A temp; write(A); read(B); B := B + temp; write(B);

T1
read(A); A := A 50; write(A);

T2

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);

No so equivalentes por viso

So equivalentes por viso

Serializao de Viso
O conceito de equivalncia por viso leva ao conceito de serializao por viso. Uma escala serializvel por viso se ela for equivalente em viso a uma escala de execuo seqencial.
T1 read(Q) write(Q) write(Q) write(Q) T2 T3 equivalente em viso escala seqencial <T1,T2,T3> j que uma instruo read(Q) l o valor inicial de Q em ambas as escalas e T3 executa a escrita final de Q em ambas as escalas.

Serializao de Viso
Modifica-se o grafo de precedncia para serializao por conflito para testar se o escalonamento serializvel por viso. Verificando se o escalonamento abaixo serializvel por conflito:
T1 read(Q) write(Q) write(Q) write(Q) Gravaes inteis T3 T2 T3 T1

T2

Serializao de Viso
Vejamos a seguinte situao: Seja S uma escala. Suponha que a transao Tj leia o valor do item de dado Q escrito por Ti. Se S serializvel por viso, ento qualquer em escala seqencial S, qual S equivalente, Ti deve preceder Tj. Suponha agora que, na escala S, a transao Tk executou um write(Q). Ento, na escala S, Tk deve preceder Ti ou deve seguir Tj. Ela no poder aparecer entre Ti e Tj, porque dessa forma Tj no leria o valor de Q escrito por Ti e, S e S no seriam equivalentes por viso.

Serializao por Viso


Se o grafo no contiver ciclos ento o escalonamento serializvel por viso. Se o grafo contiver ciclos no significa, necessariamente, que o escalonamento no serializvel. Haver ento 2n grafos diferentes, sendo que cada um contm apenas uma aresta de cada par. Se alguns desses grafos for acclico, sabe-se que a escala correspondente serializvel por viso. O escalonamento serial equivalente obtido seguindo a ordenao topolgica do grafo acclico.

Exemplo de Ordenao Topolgica


Ti Ti Tj Tj Tk Tk Tm Tm Tm ou Tj Tk Ti

Fontes Bibliogrficas:
Sistemas de Banco de Dados (Cap. 15). Abraham Silberchatz, Henry F. Korth, S Sudarshan. 5 Ed. Elsevier, 2006. Sistemas de Banco de Dados (Cap. 17). Ramez Elmasri e Sham Navathe. 4 Ed. Pearson, 2005. Controle de Concorrncia e Distribuio de Dados: A teoria clssica, suas limitaes e extenses modernas. Joo Eduardo Ferreira e Marcelo Finger. So Paulo: Escola Brasileira de Computao, 2001.

Potrebbero piacerti anche