Você está na página 1de 28

Faculdade de Negcios e Tecnologia da Informao

Programao em Banco de Dados 4 Semestre

Bacharel em Sistemas de Informao


``````

Gerenciamento de Transaes
Professor: Flvio Garcia de Carvalho Melo flaviogcmelo@aedu.com 2 Semestre 2012 - Aula 12

Leitura Recomendada
PLT Sistema de Banco de Dados Captulo 15 Manual de Referncia do MySQL

12.3. MySQL Transactional and Locking Statements Site iMasters


http://imasters.com.br/artigo/7755/mysql/stored_procedures_-_transacoes/

``````

Conceito
Uma transao uma unidade de execuo do

programa que acessa e possivelmente atualiza vrios itens de dados.


``````

[SILBERSCHATZ, 2006]

Transao
Transao uma unidade de processamento, que

pode incluir uma ou mais operaes de acesso e/ou manipulao de dados, que precisam ser completadas integralmente ou desfeitas, para garantir preciso do banco de dados. `````` A transao pode conter operaes de incluso, alterao, excluso ou seleo de dados. Iniciada com: start transaction (begin); Confirmada com: commit (persiste em banco); Desfeita com: rollback.

Propriedades de uma Transao


Atomicidade: uma transao uma unidade de
processamento, realizada integralmente ou no realizada. Consistncia: uma transao leva um banco de `````` dados de um estado consistente para outro estado consistente. Isolamento: uma transao deve parecer como se estivesse sendo executada isoladamente. Durabilidade: as alteraes aplicadas a um banco de dados por meio de uma transao confirmada (commited) devem persistir no banco de dados.

Entendendo as Propriedades ACID


ACID o acrnimo derivado da primeira letra de

cada uma das quatro propriedades.


Para entender as propriedades ACID, vamos utilizar o `````` exemplo de um sistema bancrio que possui vrias contas e executa transaes que acessam e atualizam essas contas atravs de dois mtodos. ler(x): l o dado x gravado no banco; escrever(x): escreve o dado x no banco.

Entendendo as Propriedades ACID


Suponha que a T1 seja uma transao que transfere R$ 50,00 entre a conta A e a conta B. Essa transao pode ser definida assim: T1: 1. ler(saldo_A); -- Saldo de A = R$ 1.000,00 `````` 2. A := A 50; 3. escrever(saldo_A); 4. ler(saldo_B); -- Saldo de B = R$ 2.000,00 5. B := B + 50; 6. escrever(saldo_B);

Atomicidade
A propriedade de atomicidade diz que todas as aes da transao devem ser refletidas no bando de dados ou nenhuma delas. O sistema de banco de dados armazena, em disco, `````` os valores antigos de quaisquer dados afetados por uma operao de escrita de uma transao e, se a transao no completar sua execuo, o sistema de banco de dados restaura os valores antigos para que apaream como se a transao nunca tivesse sido executada.

Atomicidade
O componente de gerenciamento de transao responsvel por garantir a atomicidade da transao. Supondo que durante a execuo da transao T1 `````` ocorra uma falha*, aps a etapa 3, que impea a concluso normal da transao. Nesse caso o saldo das contas ser A=R$ 950,00 e B=R$2.000,00, o que denominado estado inconsistente.

Consistncia
A propriedade consistncia diz que uma transao leva um banco de dados de um estado consistente para outro estado consistente. Dessa forma, o resultado da soma dos saldos de A + B deve ser o mesmo antes e depois da `````` transao. A consistncia para uma transao individual responsabilidade do programador que codifica a transao

Isolamento
A propriedade de isolamento de uma transao garante que a execuo simultnea das transaes resulte em um estado do sistema equivalente ao estado obtido se as mesmas transaes fossem `````` executadas uma de cada vez em alguma ordem. O componente do sistema de banco de dados controle de concorrncia responsvel por garantir o isolamento das transaes.

Durabilidade
A propriedade de durabilidade garante que, quando uma transao executada com sucesso, todas as atualizaes executadas no banco de dados persistem, mesmo que haja uma falha no sistema aps a transao terminar sua execuo. `````` Garantir a durabilidade responsabilidade de um componente de software do sistema de banco de dados denominado componente de gerenciamento de recuperao que garante que:
1. 2.

As atualizaes executadas pela transao sejam gravadas em disco antes que a transao termine; As informaes sobre as atualizaes executadas pela transao e gravadas em disco sejam suficientes para permitir que o banco de dados reconstrua as atualizaes quando o sistema for reiniciado aps a falha.

Estados de um Transao
Ativa: estado inicial, a transao permanece nesse

estado enquanto est executando; Parcialmente Confirmada: depois que a instruo final executada; `````` Falha: depois da identificao de que a execuo normal no pode mais prosseguir; Abortada: depois que a transao foi revertida e o banco de dados foi restaurado ao seu estado anterior ao incio da transao; Confirmada: aps o trmino bem sucedido.

Estados de um Transao
Parcialmente confirmada

confirmada

``````
ativa

falha

abortada

Escalonamento de Transaes
Permitir que vrias transaes atualizem dados ao mesmo tempo pode causar vrias complicaes com a consistncia dos dados. Garantir essa consistncia exige um processamento extra; a execuo de forma `````` serial ou seja, em sequncia, seria muito mais fcil. Porm existem dois bons motivos para permitir a concorrncia: 1. Melhor throughput e utilizao de recursos; 2. Reduo no tempo de espera.
throughput: quantidade de dados processados

Escalonamento de Transaes
Melhor Throughput

Uma transao consiste de muitas etapas, que podem envolver atividades de entrada/sada (E/S) ou atividades de CPU. A CPU e os discos podem operar em paralelo. Desta forma, enquanto uma operao `````` de E/S executada para uma T1, a CPU pode estar processando operaes para T2, enquanto outro disco pode realizar operaes de E/S para T3. Esse paralelismo aumenta o nmero de transaes executadas em um espao de tempo. Garantindo que hardware fique menos tempo ocioso.

Escalonamento de Transaes
Reduo no Tempo de Espera

Uma transaes podem ser curta (simples) ou longa (complexas), desta forma a serializao das mesmas pode fazer com que uma transao curta tenha que esperar a concluso de `````` transao longa para uma ser executada, levando a atrasos imprevisveis. Se elas esto sendo executadas sobre dados distintos o paralelismo pode reduzir os atrasos, assim como reduzir o tempo mdio de resposta: que tempo que uma transao leva para ser concluda aps ser iniciada.

Escalonamento de Transaes
Quando vrias transaes so executadas de forma simultnea, a consistncia do banco de dados pode ser destruda apesar da exatido de cada transao individual. `````` O sistema de banco de dados controla a inteirao entre as transaes atravs de esquemas de controle de consistncia. Nesse instante vamos focar o conceito de execuo simultnea correta.

Escalonamento de Transaes
Para exemplificar vamos considerar agora que temos duas transaes T1 e T2, ambas fazendo transferncias entre as contas A e B.
T1: 1. ler(saldo_A); 2. A := A 50; 3. escrever(saldo_A); 4. ler(saldo_B); 5. B := B + 50; 6. escrever(saldo_B); T2:
``````

1. ler(saldo_A); 2. temp := A * 0.1; 3. A := A temp 4. escrever(saldo_A); 5. ler(saldo_B); 6. B := B + temp; 7. escrever(saldo_B);

Escalonamento de Transaes
Quando executadas de forma sequencial, T1 depois T2 ou T2 depois T1, as transaes so consistentes, ou seja a soma de A + B permanece inalterada. A ordem cronolgica em que as transaes so executadas no sistema `````` denominada schedule*. Um schedule precisa preservar a ordem cronolgica de suas transaes e de todas as suas instrues. Esses schedules so seriais e podem agregar vrias transaes, preservando suas instrues de forma sequencial.
*schedule: agendamento ou programao

Escalonamento de Transaes
Quando o sistema de banco de dados executa vrias transaes simultaneamente, o schedule no precisa mais ser serial. Vrias sequencias de execuo so possveis agora `````` que as instrues das transaes podem ser intercaladas. Porm, uma sequencia vlida pode retorna resultados inconsistentes. tarefa do sistema de banco de dados, atravs do componente de controle de concorrncia garantir que qualquer schedule executado deixe o banco consistente.

Escalonamento de Transaes
A garantia que um schedule de execuo simultanea consistente quando suas transaes so executada de forma serial e o resultado obtido pelas duas formas de execuo o mesmo.
``````

Escalonamento de Transaes
Quando

transaes esto sendo executadas de forma concorrente e de modo entrelaado, a ordem de execuo das operaes das vrias transaes conhecida como escalonamento (schedule). Dois escalonamentos so considerados seriais quando as operaes de cada transao so executadas em srie, `````` consecutivamente, sem quaisquer operaes entrelaadas a outra transao. Um escalonamento serial se, para todas as transaes T participantes do escalonamento, todas as operaes de T forem executadas consecutivamente no escalonamento; caso contrrio, o escalonamento dito no-serial. Um escalonamento S de n transaes serivel (ou serializvel) se for equivalente a algum escalonamento serial das mesmas n transaes.

Escalonamento de Transaes
T1: Op1 Op2 Op3 Op4

``````

T2: Op1 Op2 Op3 Op4

Escalonamento Serial:

Op1 Op2 Op3 Op4 Op1 Op2 Op3 Op4

Escalonamento Serializvel ou Serivel:


Op1 Op1 Op2 Op2 Op3 Op4 Op3 Op4 Op1 Op2 Op1 Op3 Op2 Op3 Op4 Op4

Tipos de Isolamento no MySQL


REPEATABLE READ: isolamento padro do MySQL,

todos os comandos SELECTs executados na mesma transao leem uma cpia (snapshot) gerada quando da primeira leitura da transao; READ COMMITED: apenas dados confirmados podem ser lidos; `````` READ UNCOMMITED: permite a leitura de dados mesmo que os mesmos no estejam confirmados; SERIALIZABLE: assim como o REPEATABLE READ a serializao permite a leitura de dados no confirmados caso o parmetro autocommit esteja habilitado, caso contrario cria uma fila de acesso permitindo a leitura somente aps a confirmao da operao.

Comandos no MySQL
Identificar o nvel de isolamento:

show variables like '%isolation%';


Identificar se o estado do parmetro AutoCommit

show variables like '%autoCommit%'; ou select @@autocommit;

``````

Transaes - Sintaxe
START TRANSACTION ... Bloco de cdigo SQL ... `````` COMMIT TRANSACTION ou ROLLBACK TRANSACTION Obs: Blocos no caracterizam incio e trmino de transao.

Exemplos com Transaes


START TRANSACTION;

SELECT @A:=SUM(salary) `````` FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1; COMMIT;

Você também pode gostar