Sie sind auf Seite 1von 16

Comando EXPLAIN

O comando EXPLAIN permite que se possa visualizar todas as etapas envolvidas no processamento de uma consulta.Esta viso do funcionamento interno do banco permite que se possa fazer melhorias em consultas que estejam tomando tempo excessivo, por exemplo. Sintaxe: EXPLAIN [ ANALYZE ] [ VERBOSE ] statement O resultado do comando explain pode ser surpreendente. Consultas com vrias linhas podem ser mais econmicas que uma operao descrita em uma linha de SQL, realizando a mesma tarefa. A clusula ANALYSE executa de fato o comando e retorna o tempo de execuo. Pode tornar bem mais lento o resultado se a execuo do comando for demorada. O uso de VERBOSE vai detalhar ainda mais o resultado do comando EXPLAIN, o que pode dificultar a leitura.

Abaixo, alguns exemplos comentados: 1- EXPLAIN em consulta sobre uma tabela simples. explain select * from continente; Seq Scan on continente (cost=0.00..1.03 rows=3 width=646) 2- EXPLAIN ANALYZE em consulta sobre uma tabela simples. explain analize select * from continente; Seq Scan on continente (cost=0.00..1.03 rows=3 width=646) (actual time=0.016..0.020 rows=3 loops=1) Total runtime: 0.085 ms 3 - EXPLAIN ANALYZE VERBOSE em consulta sobre uma tabela simples. O Resultado bastante detalhado. explain analize select * from continente; {SEQSCAN :startup_cost 0.00 :total_cost 1.03 :plan_rows 3 :plan_width 646 :targetlist ( {TARGETENTRY :expr {VAR

:varno 1 :varattno 1 :vartype 1043 :vartypmod 54 :varlevelsup 0 :varnoold 1 :varoattno 1 } :resno 1 :resname nome :ressortgroupref 0 :resorigtbl 16734 :resorigcol 1 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 2 :vartype 1043 :vartypmod 254 :varlevelsup 0 :varnoold 1 :varoattno 2 } :resno 2 :resname obs :ressortgroupref 0 :resorigtbl 16734 :resorigcol 2 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 3 :vartype 700 :vartypmod -1 :varlevelsup 0 :varnoold 1 :varoattno 3 } :resno 3 :resname population :ressortgroupref 0 :resorigtbl 16734 :resorigcol 3 :resjunk false } {TARGETENTRY

:expr {VAR :varno 1 :varattno 4 :vartype 23 :vartypmod -1 :varlevelsup 0 :varnoold 1 :varoattno 4 } :resno 4 :resname cod :ressortgroupref 0 :resorigtbl 16734 :resorigcol 4 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 5 :vartype 700 :vartypmod -1 :varlevelsup 0 :varnoold 1 :varoattno 5 } :resno 5 :resname tamanho :ressortgroupref 0 :resorigtbl 16734 :resorigcol 5 :resjunk false } ) :qual <> :lefttree <> :righttree <> :initPlan <> :extParam (b) :allParam (b) :nParamExec 0 :scanrelid 1 } Seq Scan on continente (cost=0.00..1.03 rows=3 width=646) (actual time=0.012..0.017 rows=3 loops=1) Total runtime: 0.084 ms 3 - EXPLAIN em consulta sobre uma tabela que herdada por outras tabelas. Apresenta subconsultas s tabelas filhas.

explain select * from lugar; Result (cost=0.00..13.26 rows=126 width=638) -> Append (cost=0.00..13.26 rows=126 width=638) -> Seq Scan on lugar (cost=0.00..11.20 rows=120 width=638) -> Seq Scan on continente lugar (cost=0.00..1.03 rows=3 width=638) -> Seq Scan on pais_cont lugar (cost=0.00..1.03 rows=3 width=638) 4 - EXPLAIN em consulta sobre uma viso com metadados das tabelas. . explain select * from pg_tables; Hash Left Join (cost=2.16..18.09 rows=72 width=200) Hash Cond: (c.relnamespace = n.oid) -> Hash Left Join (cost=1.04..15.62 rows=72 width=140) Hash Cond: (c.reltablespace = t.oid) -> Seq Scan on pg_class c (cost=0.00..13.59 rows=72 width=80) Filter: (relkind = 'r'::char) -> Hash (cost=1.02..1.02 rows=2 width=68) -> Seq Scan on pg_tablespace t (cost=0.00..1.02 rows=2 width=68) -> Hash (cost=1.05..1.05 rows=5 width=68) -> Seq Scan on pg_namespace n (cost=0.00..1.05 rows=5 width=68) Obs.: No existe comando EXPLAIN na especificao oficial do SQL

O Comando Explain II
Como interpretar os resultados do comando EXPLAIN? O exemplo abaixo relativamente simples, mas no entanto revelador. explain select * from continente Seq Scan on continente (cost=0.00..1.03 rows=3 width=646) O resultado do comando apresenta quatro nmeros para cada n do plano de execuo de uma consulta: - Custo inicial - 0.00 - o custo de execuo da consulta at o inicio da sada dos resultados. No nosso exemplo, este custo mnimo, pois a consulta r relativamente simples. Em outros casos, pode ser que o maior custo de execuo de consulta seja exatamente este custo inicial. - Custo total - 1.03 - custo total estimado considerando que todas as linhas sero retornadas. O uso de LIMIT em consultas faz com que o custo total seja reduzido. - Rows - estimativa de quantidade de registros retornados. - Width - estimativa de quantidade de bytes retornados.

Um segundo exemplo torna ainda mais claro o funcionamento do comando. explain select nome, obs from continente order by nome Sort (cost=1.05..1.06 rows=3 width=634) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.03 rows=3 width=634) Uma pequena mudana na consulta anteriori fez com que fossem necessrias vrias operaes antes do retorno dos resultados. Cada operao tem individualizados os custos inicial, total, em termos de linhas e em termos de bytes. So informaes que podem ser bastante teis na otimizao de consultas atravs do comando EXPLAIN. Abaixo, duas consultas bastante semelhantes e seus custos. A simples utilizao dos campos na clusula select ao invs do * j causou uma importante reduo no custo de execuo da consulta no que tange estimativa da quantidade dos bytes retornados: explain select * from continente order by nome Sort (cost=1.05..1.06 rows=3 width=646) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.03 rows=3 width=646) explain select nome from continente order by nome Sort (cost=1.05..1.06 rows=3 width=118) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.03 rows=3 width=118)

O Comando Explain III


A interpretao do comando EXPLAIN importante e pode revelar surpresas. No exemplo abaixo, comandos diferentes que retornam os mesmos dados apresentam resultado equivalente. Em termos prticos, qualquer das sintaxes traria os mesmos resultados e tomaria aproximadamante o mesmo tempo. explain select nome, obs from continente where cod = 1 order by nome Sort (cost=1.05..1.05 rows=1 width=634) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.04 rows=1 width=634) Filter: (cod = 1) explain select nome, obs from continente where cod in (1) order by nome Sort (cost=1.05..1.05 rows=1 width=634) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.04 rows=1 width=634) Filter: (cod = 1) J neste segundo exemplo, comandos diferentes que retornam os mesmos dados apresentam resultados diferentes. Em termos prticos, uma sintaxe poderia ser vantajosa

em relao outra, ainda que traga os mesmos dados. O ganho no chega a ser substancial, mas pode ser percebido. explain select nome, obs from continente where cod = 1 or cod = 2 or cod = 3 order by nome Sort (cost=1.06..1.07 rows=2 width=634) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.05 rows=2 width=634) Filter: ((cod = 1) OR (cod = 2) OR (cod = 3)) explain select nome, obs from continente where cod in (1, 2, 3) order by nome Sort (cost=1.05..1.06 rows=2 width=634) Sort Key: nome -> Seq Scan on continente (cost=0.00..1.04 rows=2 width=634) Filter: (cod = ANY ('{1,2,3}'::integer[])) Alteraes de sintaxe em comandos SQL baseadas na anlise dos custos s so recomendadas se o custo for relevante e se o ganho de uma alternativa em relao a outra seja significativo. Uma consulta SQL que seja executada muitas vezes ao dia uma boa candidata a testes com o comando EXPLAIN.

Dica: Comando Explain Analyze


O comando Explain Analyze oferece informaes mais acuradas pois executa de fato os comandos que so fornecidos. No entanto certas operaes podem alterar os dados em disco, o que pode ser indesejvel. O uso dos comandos Begin Transaction e Rollback impedem que a base seja alterada e permitem a execuo do comando sem alteraes em Banco. BEGIN; EXPLAIN ANALYZE (seu comando); ROLLBACK; O exemplo abaixo mostra em termos prticos um teste de excluso de registros em que se deseja testar o tempo para excluso sem apagar de fato os dados de uma tabela: BEGIN; EXPLAIN ANALYZE delete from lugar2; <== Recupere neste ponto os dados do comando EXPLAIN ROLLBACK; <== Retorna ao estado anterior ao do comando DELETE utilizado

O Comando Vacuum
fortemente recomendvel para melhor desempenho e aproveitamento do espao de armazenamento secundrio do seu banco de dados que se faa a execuo peridica do comando VACUUM. Este comando reaproveita espaos em branco deixados pelas atualizaes e excluses de registros (fragmentao interna) e pode ser utilizado para atualizao das estatsticas para planejamento e otimizao de consultas. As alteraes de registros produzem novas verses dos dados no banco em virtude do protocolo de controle de concorrncia multiverso, as quais no so fisicamente excludas aps a execuo das transaes, causando aumento de espao utilizado. A excluso de registros tambm no elimina imediatamente os dados, proporcionando melhor desempenho para delees. Em ambos os casos o espao no utilizado liberado com a execuo deste comando. Adicionalmente, o comando pode atualizar as estatsticas do banco de dados, permitindo planos de execuo de consultas melhor otimizados e melhorando o desempenho do sistema como um todo. Em ambientes com grande quantidade de dados submetidos a muitas alteraes, excluses e incluses de dados, o comando Vacuum pode trazer resultados significativos. Sintaxe: VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ] VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ] Exemplos: - VACUUM Sintaxe mais simples. Libera o espao bloqueado para uso, mas no restringe as leituras e escritas ao banco durante o processo (no bloqueia tabelas durante a reorganizao). No compacta os dados eliminando a fragmentao interna. Apenas libera os espaos para utilizao. - VACUUM FULL Libera o espao bloqueado para uso, movendo registros e ocupando os espaos disponveis dentro dos blocos. Restringe as leituras e escritas ao banco, pois bloqueia objetos durante a sua execuo. Como resultado final, compacta os dados eliminando a fragmentao interna. - VACUUM (FULL) VERBOSE Efetua o VACUUM, tanto o normal quanto o FULL, apresentando um relatrio detalhado das operaes realizadas. A opo FULL no diminui ndices, o que feito pelo comando REINDEX. - VACUUM (FULL) ANALYSE

Efetua o VACUUM, tanto o normal quanto o FULL, atualizando as estatsticas utilizadas na otimizao das consultas. - VACUUM (FULL) TABELA Efetua o VACUUM, tanto o normal quanto o FULL, na tabela fornecida. Opo recomendada quando se demanda maior controle sobre o processo de reorganizao do banco de dados.

O Comando Truncate
Este comando exclui todas as linhas de uma tabela ou de uma lista de tabelas de forma mais rpida que o comando DELETE tradicional. Apenas o owner de uma tabela pode eliminar seus dados com o comando TRUNCATE. recomendado o prudncia no uso deste comando, especialmente com a clusula CASCADE, pois informaes relevantes podem ser eliminadas. Sintaxe: TRUNCATE [ TABLE ] name [, ...] [ CASCADE | RESTRICT ] A clusula CASCADE elimina tabelas referenciadas pela tabela que sofre o TRUNCATE. A clusula RESTRICT o padro e faz o TRUNCATE apenas da tabela explicitamente citada no comando, retornando erro caso haja alguma violao de restrio de integridade. No permitido TRUNCATE se a tabela truncada referenciada por uma tabela filha atravs de foreign key: ERROR: cannot truncate a table referenced in a foreign key constraint SQL state: 0A000 Detail: Table "tstdel3" references "tstdel". Hint: Truncate table "tstdel3" at the same time, or use TRUNCATE ... CASCADE. Alguns exemplos: 1 - Excluso de registros de uma tabela com a clusula TABLE TRUNCATE TABLE tstdel; 2 - Excluso de registros com referncia a um esquema TRUNCATE public.tstdel; 3 - Sintaxe smplificada TRUNCATE tstdel; 4 - Excluso de mais de uma tabela ao mesmo tempo TRUNCATE tstdel, tstdel2; 5 - Excluso com clusula CASCADE TRUNCATE tstdel CASCADE; Obs.: O comando EXPLAIN no funciona com o comando TRUNCATE, gerando mensagem de erro. Obs.2: A especificao padro da linguagem SQL no apresenta o comando TRUNCATE.

Transaes no PostgreSQL
Transao cada execuo de programa que realiza leitura e/ou escrita em um banco de dados. O PostgreSQL implementa este conceito resguardando as caractersticas ACID atomicidade, consistncia, isolamento e durabilidade. Atomicidade - uma transao totalmente executada ou totalmente revertida sem deixar efeitos no banco de dados Consistncia - os resultados so coerentes com as operaes realizadas Isolamento - a execuo de uma transao no interfere ou sofre interferncia em relao s demais transaes em execuo Durabilidade - o resultado das transaes deve ser persistido fisicamente no banco de dados. Cada comando executado, seja de leitura ou escrita, gera uma transao implcita no PostgreSql, que gerencia a manuteno das caractersticas ACID. Existem duas ressalvas a serem feitas: - Em certas situaes interessante se agregar vrios comandos como sendo integrantes de uma mesma transao, como por exemplo em uma transferncia bancria que envolve a retirada de dinheiro de uma conta e o acrscimo em outra como se fosse apenas uma nica operao lgica. - Em outras situaes se faz necessrio sacrificar ou flexibilizar as caractersticas ACID em virtude da necessidade de maior desempenho. Para executar estas atividades so disponibilizados comandos de controle de transao: - BEGIN; - COMMIT; - ROLLBACK; - START TRANSACTION; - SAVEPOINT; - SET TRANSACTION; Nos prximos posts sero detalhados os comandos, suas sintaxes e funes, com exemplos.

Os Comandos BEGIN, COMMIT e ROLLBACK


O comando BEGIN inicia um bloco de comandos SQL que fazem parte de uma transao. Os comandos realizados aps o este comando s so persistidos em disco e seus resultados s so apresentados aos demais usurios do banco aps a efetivao com o comando COMMIT. A transao finalizada pelo comando COMMIT, o qual dispara a efetivao da transao no banco de dados e torna visvel para os demais usurios os resultados da execuo dos seus comandos.

O comando ROLLBACK aborta a transao que est em andamento, impedindo que os as alteraes nos dados nela realizadas sejam persistidos no banco de dados. Sintaxe: BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] onde o transaction_mode um dos listados abaixo: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY Obs.: os transaction modes sero discutidos em maior profundidade ao se detalhar o comando SET TRANSACTION. COMMIT [ WORK | TRANSACTION ] ROLLBACK [ WORK | TRANSACTION ] Exemplos: 1 - Sintaxe mais simples com BEGIN e COMMIT BEGIN; insert into tstdel values (1,'teste', current_timestamp); insert into tstdel values (2,'teste2', current_timestamp); SELECT * FROM tstdel; COMMIT; 2 - Sintaxe mais simples com BEGIN e COMMIT. A clusula WORK no tem efeito mantida por compatibilidade. BEGIN WORK; insert into tstdel values (1,'teste', current_timestamp); insert into tstdel values (2,'teste2', current_timestamp); SELECT * FROM tstdel; COMMIT WORK; 3 - Sintaxe mais simples com BEGIN e COMMIT. A clusula TRANSACTION no tem efeito mantida por compatibilidade. BEGIN TRANSACTION; insert into tstdel values (1,'teste', current_timestamp); insert into tstdel values (2,'teste2', current_timestamp); SELECT * FROM tstdel; COMMIT TRANSACTION; 4 - A transao abaixo abortada com o ROLLBACK. A insero realizada no gravada no banco de dados.

BEGIN; insert into tstdel values (1,'teste', current_timestamp); ROLLBACK; 5 - A transao abaixo abortada com o ROLLBACK. A insero realizada no gravada no banco de dados. A clusula WORK no tem efeito e mantida por compatibilidade. BEGIN; insert into tstdel values (1,'teste', current_timestamp); ROLLBACK WORK; 6 - A transao abaixo abortada com o ROLLBACK. A insero realizada no gravada no banco de dados. A clusula TRANSACTION no tem efeito e mantida por compatibilidade. BEGIN; insert into tstdel values (1,'teste', current_timestamp); ROLLBACK TRANSACTION;

O Comando START TRANSACTION


Este comando tem a mesma funo do BEGIN, servindo como ponto de delimitao do incio de uma transao. O ponto de trmino da transao assinalado com um comando COMMIT ou ROLLBACK. Sintaxe: START TRANSACTION [ transaction_mode [, ...] ] Onde o transaction_mode assume um dos seguintes valores: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY Obs.: os transaction modes sero discutidos em maior profundidade ao se detalhar o comando SET TRANSACTION. Exemplo: START TRANSACTION; insert into tstdel values (1000, 'LALALA', current_timestamp); COMMIT;

Os Comandos SAVEPOINT, ROLLBACK TO SAVEPOINT e RELEASE SAVEPOINT


Savepoints so pontos dentro de uma transao que indicam que os comandos posteriores podem sofrer rollback, enquanto os comandos anteriores so mantidos no

banco de dados mesmo que a transao tenha sido abortada. Uma transao pode ter mais de um Savepoint que indicado por um nome fornecido pelo programador. Normalmente este comando empregado com o comando ROLLBACK TO SAVEPOINT, o que ilustrado nos exemplos abaixo. Sintaxe: SAVEPOINT savepoint_name A sintaxe do comando ROLLBACK TO SAVEPOINT a seguinte: ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name Exemplo: 1 - No primeiro exemplo existem dois comandos de insero. O Savepoint assegura que o primeiro insert seja mantido mesmo que haja um rollback da transao. BEGIN; insert into tstdel values (1000, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; insert into tstdel values (1001, 'LALALA', current_timestamp); ROLLBACK TO SAVEPOINT my_savepoint; COMMIT; 2 - Com trs comandos de insero, observa-se que o primeiro e o ltimo so persistidos no banco de dados. O Savepoint assegura que o primeiro insert seja mantido mesmo que haja um rollback da transao e a insero realizada aps o comando rollback efetivada e gravada no banco de dados. BEGIN; insert into tstdel values (1000, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; insert into tstdel values (1001, 'LALALA', current_timestamp); ROLLBACK TO SAVEPOINT my_savepoint; insert into tstdel values (1002, 'LALALA', current_timestamp); COMMIT; Transaes grandes podem ter um grande nmero de Savepoints. Em virtude disto, pode ser necessrio fazer a liberao (ou destruio) de savepoints quando no forem mais necessrios em uma transao. O comando RELEASE SAVEPOINT faz essa eliminao de savepoint. Sintaxe: RELEASE [ SAVEPOINT ] savepoint_name Exemplos: 1 - Exemplo de Release Savepoint.

BEGIN; insert into tstdel values (1009, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; insert into tstdel values (1010, 'LALALA', current_timestamp); RELEASE SAVEPOINT my_savepoint; SAVEPOINT my_savepoint2; insert into tstdel values (1011, 'LALALA', current_timestamp); RELEASE SAVEPOINT my_savepoint2; COMMIT; 2 - Exemplo de Release Savepoint com savepoint repetido. BEGIN; insert into tstdel values (1009, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; insert into tstdel values (1010, 'LALALA', current_timestamp); RELEASE SAVEPOINT my_savepoint; SAVEPOINT my_savepoint; insert into tstdel values (1011, 'LALALA', current_timestamp); RELEASE SAVEPOINT my_savepoint; COMMIT; 3 - Exemplo de Release Savepoint com savepoints repetidos e em seqncia. Neste caso, o comando release libera o checkpoint mais prximo e o comando ROLLBACK TO CHECKPOINT passa a indicar um rollback at o primeiro savepoint. Apenas o primeiro comando insert efetuado. BEGIN; insert into tstdel values (1009, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; insert into tstdel values (1010, 'LALALA', current_timestamp); SAVEPOINT my_savepoint; RELEASE SAVEPOINT my_savepoint; insert into tstdel values (1011, 'LALALA', current_timestamp); ROLLBACK TO SAVEPOINT my_savepoint; COMMIT;

Os Comandos SET TRANSACTION e SET SESSION


Estes comandos definem o chamado transaction mode, caracterstica que influencia a execuo de uma transao. Dependendo do que for definido, o sistema poder por exemplo obter um melhor desempenho sacrificando a aderncia s desejveis caractersticas ACID (Atomicidade, Consistncia, Isolamento e Durabilidade). So apresentados junto na ajuda do PostgreSQL por terem funo similar. O transaction_mode composto pelo nvel de isolamento da transao e das permisses de uma transao para fazer leitura e escrita em um banco de dados. Outros comandos podem afetar o transaction mode: START TRANSACTION e BEGIN. Nestes comandos afetado o transaction mode da transao corrente. O comando SET

TRANSACTION permite a alterao desta caracterstica tanto para a transao corrente quanto para as subseqentes. SINTAXE: SET TRANSACTION transaction_mode [, ...] SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...] Onde o transaction_mode pode assumir os seguintes valores: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY Principais transaction modes: - SERIALIZABLE - Fiel s caractersticas ACID, apresenta menor desempenho pois praticamente simula a execuo sequencial de transaes. A transao poder ver apenas os dados j efetivados no banco antes do incio da execuo da transao. Isto , no poder por exemplo ler dados inseridos aps o seu incio. - REPEATABLE READ - Mais flexvel, apresenta melhor desempenho em relao ao anterior. A transao poder ler os mesmos dados vrias vezes durante sua execuo e o valor ser o mesmo. - READ COMMITTED - Mais flexvel e com melhor desempenho em relao ao anterior. A transao poder ler os mesmos dados vrias vezes durante sua execuo e o valor lido ser diferente caso o dado tenha sido atualizado por outra transao que tenha feito COMMIT explcito ou implcito. - READ UNCOMMITTED - Apresenta o melhor desempenho em relao s demais. No entanto no fiel s caractersticas ACID. Neste caso a transao poder ler os mesmos dados vrias vezes durante sua execuo e o valor lido ser diferente caso o dado tenha sido atualizado por outra transao que tenha feito ou no COMMIT. Exemplos: 1 - Altera a transao corrente para SERIALIZABLE SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 2 - Altera a transao corrente para READ COMMITTED SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 3 - Altera a transao corrente para SERIALIZABLE SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 4 - Altera a transao corrente para READ UNCOMMITTED SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

5 - Define que a transao corrente ser SERIALIZABLE com permisso de leitura e escrita SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE 6 - Define que a transao corrente ser SERIALIZABLE com permisso apenas para leitura de dados SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY 7 - Altera as transaes subseqentes para SERIALIZABLE SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE 8 - Altera as transaes subseqentes para REPEATABLE READ SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ 9 - Altera as transaes subseqentes para READ COMMITTED SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED 10 - Altera as transaes subseqentes para READ UNCOMMITTED SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 11 - Altera as transaes subseqentes para SERIALIZABLE com permisso para leitura e escrita SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE 12 - Altera as transaes subseqentes para REPEATABLE READ com permisso apenas para leitura SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY

Das könnte Ihnen auch gefallen