Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
de Transaes
(Aulas 1 e 2)
Clodis Boscarioli
Agenda:
Introduo:
Apresentao da disciplina; Leitura do Plano de Ensino;
Usurios navegantes
Usurios
Compilador DML
Interpretador DDL
SGBD
Gerenciador de memria
Armazenamento em disco
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;
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.
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.
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);
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.
Efetivada
Abort
Abort
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.
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
Tj para
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);
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.
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.