Carlos H Cantu - Tudo Sobre Transacoes

Download Carlos H Cantu - Tudo Sobre Transacoes

Post on 08-Apr-2015

470 views

Category:

Documents

8 download

DESCRIPTION

Slides da minha palestra sobre transaes no 6o. FDD

TRANSCRIPT

<p>Tudo que voc precisa saber sobre transaesCarlos H. Cantu www.firebase.com.br</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>1/35</p> <p> 2009 Carlos H. Cantu</p> <p>Transaes</p> <p> Um dos maiores benefcios da mudana de bancos desktop para Cliente/Servidor. Modelo de gerenciamento varia entre os SGBDs. Visa manter a consistncia dos dados. Controle e seqncia de operaes so de responsabilidade do desenvolvedor. Protegem os dados no caso de falha no lado cliente, mas no do lado servidor (use nobreak, etc!)www.FirebirdDevelopersDay.com.br</p> <p>2/35</p> <p> 2009 Carlos H. Cantu</p> <p>Transaes no Firebird</p> <p> MGA Multi Generational Architecture (conhecida tambm por MVCC) Armazena as alteraes diretamente no banco de dados, juntamente com informaes para reverter ao estado original (backversions). Dispensa log de transaes.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>3/35</p> <p> 2009 Carlos H. Cantu</p> <p>ACID</p> <p> Atomicidade Consistncia Isolamento Durabilidade Firebird totalmente compatvel com ACIDwww.FirebirdDevelopersDay.com.br</p> <p>4/35</p> <p> 2009 Carlos H. Cantu</p> <p>ACID - Atomicidade</p> <p> Todas as operaes realizadas dentro de uma nica transao, so parte de uma nica operao indivisvel.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>5/35</p> <p> 2009 Carlos H. Cantu</p> <p>ACID - Consistncia</p> <p> O banco de dados deve ficar num estado consistente, to logo a transao seja completada.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>6/35</p> <p> 2009 Carlos H. Cantu</p> <p>ACID - Isolamento</p> <p> Cada transao deve ficar completamente isolada de outras transaes concorrentes, fazendo com que as alteraes nos dados no sejam expostas a outras transaes antes da transao commitar.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>7/35</p> <p> 2009 Carlos H. Cantu</p> <p>ACID - Durabilidade</p> <p> Assim que a transao se completar, as alteraes nos dados se tornam permanentes. Durante o commit, o SGBD deve registrar que a transao foi terminada com sucesso, e realizar outros trabalhos, por exemplo, no caso do 2 phase commit ou eventos.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>8/35</p> <p> 2009 Carlos H. Cantu</p> <p>Firebird</p> <p> Alteraes nos dados so escritas diretamente no disco (no ficam na memria*), bem como os dados necessrios para reverter para o estado original. Esses dados ocupam espao temporariamente. Necessrio uma forma de controlar esse lixo (Garbage Collection).* No confudir com cache de disco.www.FirebirdDevelopersDay.com.br</p> <p>9/35</p> <p> 2009 Carlos H. Cantu</p> <p>Oracle, DB2, Sybase, SQLServer</p> <p> O BD contem sempre a informao da ltima atualizao realizada. Para voltar ao estado anterior necessrio log de transaes. Implicaes: Alto custo de rollback possvel voltar o BD em qualquer perodo de tempo. Fcil limpar os logs de operaces (separados do BD) Isolamento entre transaes utiliza travas, pois o BD tem somente a ltima informao escrita.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>10/35</p> <p> 2009 Carlos H. Cantu</p> <p>Firebird, PostgreSQL</p> <p> O BD contem todas as verses de um registro que esto sendo utilizadas por diferentes transaes concorrentes, dispensando o log de transaes. Implicaes: Rollbacks baratos. Sujeira no BD. Impossvel voltar o BD para um determinado momento no tempo. Transaes podem ler os registros sem necessidade de travas.www.FirebirdDevelopersDay.com.br</p> <p>11/35</p> <p> 2009 Carlos H. Cantu</p> <p>Backversions</p> <p> Um mesmo registro pode ter diferentes verses disponveis. Cada nova verso contm um link apontando para a verso anterior, formando uma cadeia de verses. Cada backversion possui o nmero da transao que o criou. Leitura comea sempre pela verso mais recente. Criados por updates ou deletes.www.FirebirdDevelopersDay.com.br</p> <p>12/35</p> <p> 2009 Carlos H. Cantu</p> <p>Backversions e Deltas</p> <p> Backversion: Delta contm apenas os valores dos campos alterados. Full contm os valores de todos os campos do registro.</p> <p> Full criado se a mesma transao atualiza o mesmo registro pela segunda vez, ou se o tamanho do Delta ficar maior que a de um full.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>13/35</p> <p> 2009 Carlos H. Cantu</p> <p>Iniciando uma transao no Firebird SET TRANSACTION [READ WRITE | READ ONLY] [WAIT | NO WAIT [LOCK TIMEOUT]] /* resoluo de conflitos */ [ISOLATION LEVEL] /* isolamento */ {SNAPSHOT [TABLE STABILITY] | READ COMMITTED [[NO] RECORD_VERSION]]} [RESERVING | USING [, db-handle ...]]; ::= [, ...] [FOR [SHARED | PROTECTED] {READ | WRITE}] [, [, ..]]</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>14/35</p> <p> 2009 Carlos H. Cantu</p> <p>Encerrando uma transao</p> <p>COMMIT /* Encerrar confirmando as alteraes */ ROLLBACK /* Encerrar desfazendo as alteraes */ COMMIT RETAIN /* Confirma alteraes, mas mantm o contexto da transao */ ROLLBACK RETAIN /* Confirma alteraes, mas mantm o contexto da transao */www.FirebirdDevelopersDay.com.br</p> <p>15/35</p> <p> 2009 Carlos H. Cantu</p> <p>Controle transacional</p> <p> O controle transacional feito pela aplicao cliente. No h como iniciar ou encerrar uma transao de dentro de triggers ou stored procedures.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>16/35</p> <p> 2009 Carlos H. Cantu</p> <p>DEADLOCK</p> <p> Deadlock a forma que o Firebird tem para avisar que um conflito de atualizaes foi encontrado. A aplicao cliente deve identificar os deadlocks e decidir o que fazer.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>17/35</p> <p> 2009 Carlos H. Cantu</p> <p>Modo WAIT e NO WAIT</p> <p> NO WAIT - Determina se conflitos encontrados devem retornar imediatamente um deadlock. WAIT Faz com que a transao que encontrou um conflito aguarde que a outra transao faa um rollback ou um commit. A partir do FB 2, possvel determinar um timeout para o modo WAIT.www.FirebirdDevelopersDay.com.br</p> <p>18/35</p> <p> 2009 Carlos H. Cantu</p> <p>Isolamentos</p> <p> Determinam como as transaes concorrentes interagem e enxergam os dados entre si. Isolamentos comuns: Dirty Read Read Commited Repeatable Read Serializable</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>19/35</p> <p> 2009 Carlos H. Cantu</p> <p>Isolamentos Dirty Read/Read Uncommited</p> <p> No suportado pelo Firebird (no faz sentido para o FB, pois ele permite que as transaes concorrentes enxerguem os dados previamente commitados).</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>20/35</p> <p> 2009 Carlos H. Cantu</p> <p>Isolamentos Read Commited</p> <p> A transao s pode ver os dados que j esto commitados. Geralmente, nos outros BDs, as transaes no conseguem ler registros que esto com alteraes pendentes. Indicado para browse, manuteno de dados. FB suporta dois modos neste isolamento: record_version no_record_version (imita os outros SGBDs que usam travas/log de transaes)www.FirebirdDevelopersDay.com.br</p> <p>21/35</p> <p> 2009 Carlos H. Cantu</p> <p>Isolamentos Repeatable Read</p> <p> Firebird fornece isolamento similar: Concurrency/Snapshot Foto do BD - a transao no enxerga alteraes feitas por outras transaes. Diferena para o Repeatable Read: o Firebird no garante que os registros lidos podero ser alterados pela prpria transao (outra transao pode alterar ele primeiro). Indicado para relatrios.www.FirebirdDevelopersDay.com.br</p> <p>22/35</p> <p> 2009 Carlos H. Cantu</p> <p>Isolamentos Serializable/Consistency</p> <p> Tambm chamado de Snapshot Table Stability Semelhante ao Snapshot, mas garante que os registros lidos podero ser atualizados pela transao. Bloqueia outras transaes de gravar nas tabelas que foram acessadas pela transao. Nota: A tabela travada somente depois que alguma instruo SQL acessou.www.FirebirdDevelopersDay.com.br</p> <p>23/35</p> <p> 2009 Carlos H. Cantu</p> <p>Firebird Table Reservation Transaction</p> <p> Permite iniciar uma transao e colocar travas em tabelas especficas. A trava colocada assim que a transao iniciada. Sucesso depende do WAIT/NOWAIT e se h escritas pendentes feitas por outras transaes. Permite travar tabelas "dependentes" (que sofrem alteraes por triggers, etc)www.FirebirdDevelopersDay.com.br</p> <p>24/35</p> <p> 2009 Carlos H. Cantu</p> <p>Table Reservation Transaction</p> <p> Modos suportados: Shared read. Todas as transaes podem ler e gravar (maior grau de concorrncia). Shared write. Todas as transaes, exceto as com isolamento consistency podem ler e gravar. Protected read. Todas as transaes (incluindo esta) s podem ler. Protected write. Todas as transaes, exceto as consistency, podem ler, mas somente esta transao pode gravar.www.FirebirdDevelopersDay.com.br</p> <p>25/35</p> <p> 2009 Carlos H. Cantu</p> <p>Table Reservation - exemplo</p> <p> SQL&gt; set transaction isolation level read committed reserving clientes for protected write; Faz com que a tabela clientes s possa ser gravada pela transao atual.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>26/35</p> <p> 2009 Carlos H. Cantu</p> <p>Two Phase Commit</p> <p> Permite que uma mesma transao esteja conectada diferentes bancos de dados. til, por exemplo, em replicaes sncronas. Pode gerar transaes em limbo.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>27/35</p> <p> 2009 Carlos H. Cantu</p> <p>Garbage Collection</p> <p> Faz a limpeza do lixo. No FB &gt;= 2.0 pode ser cooperativa ou background. Apaga as verses dos registros anteriores OST, diminuindo o tamanho da cadeia de backversions. Libera o espao ocupado pelos backversions para ser reaproveitado.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>28/35</p> <p> 2009 Carlos H. Cantu</p> <p>SWEEP</p> <p> Limpeza do banco de dados. Pode ser disparado manualmente ou automaticamente (OAT OIT). Percorre todas as tabelas do BD, descartando as backversions, liberando o espao para ser reaproveitado. Incrementa a OIT. Se o acesso for exclusivo, o nmero ser o da Next Transaction menos 1.www.FirebirdDevelopersDay.com.br</p> <p>29/35</p> <p> 2009 Carlos H. Cantu</p> <p>GSTAT -hDatabase "employee.fdb" Database header page information: Flags 0 Checksum 12345 Generation 199 Page size 4096 ODS version 11.1 Oldest transaction 194 -- OIT Oldest active 195 -- OAT Oldest snapshot 192 -- OST Next transaction 197 -- NT Bumped transaction 1 Sequence number 0 Next attachment ID 8 Implementation ID 16 Shadow count 0 Page buffers 0 Next header page 0 Database dialect 3 Creation date Feb 27, 2009 23:24:29 Attributes force write Variable header data: *END*</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>30/35</p> <p> 2009 Carlos H. Cantu</p> <p>Nmeros importantes</p> <p> OAT Oldest Active Transaction OIT Oldest Interesting Transaction transaes com estado diferente de commit, ex: active, limbo, rolled back. OST = Oldest Snapshot Transaction. Os valores da OAT, OST, OIT e Next so atualizados sempre que uma nova transao iniciada.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>31/35</p> <p> 2009 Carlos H. Cantu</p> <p>Situaes interessantes</p> <p> Deadlock gerado com um select: Transaes com isolamento read committed no record_version e no wait;</p> <p> Transaes Read Committed READ ONLY no bloqueiam a coleta de lixo. 90% das reclamaes de lentido com o Firebird esto relacionadas com o controle incorreto das transaes (ou falta dele).www.FirebirdDevelopersDay.com.br</p> <p>32/35</p> <p> 2009 Carlos H. Cantu</p> <p>Situaes interessantes</p> <p> Commit RetainingOperao Start Transaction Commit Start Transaction Commit Retaining Commit Retaining Commit Retaining Commit Retaining Commit Start Transaction Trans. ID 1 1 2 2 2 2 2 2 3 OAT 1 1 Commit 2 2 2 2 2 2 3 Start Transaction Update... Commit Retaining Commit Retaining Update... Commit Retaining Commit Retaining Commit Start Transaction 4 4 4 5 3 3 1 2 1 2 2 2 2 2 2 2 2 5 Operao Start Transaction Trans. ID 1 OAT 1</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>33/35</p> <p> 2009 Carlos H. Cantu</p> <p>Utilitrios que podem ajudar</p> <p> FB Scanner FB DataGuard Verses de avaliao e Free no CD do FDD.</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>34/35</p> <p> 2009 Carlos H. Cantu</p> <p>Dvidas?</p> <p>www.FirebirdDevelopersDay.com.br</p> <p>35/35</p> <p> 2009 Carlos H. Cantu</p>