terça-feira, 6 de setembro de 2016

PLANO DE EXECUÇÃO DE SQL (QUERY) NO BANCO DE DADOS ORACLE

O plano de execução de uma query informa o tempo de execução e o "caminho" que a execução está tomando durante o processamento.

Esse plano, gerado através de comandos que iremos descrever abaixo, nos auxilia na análise de execução de um SQL, onde através da informação obtida, podemos tomar decisões de alteração da query na tentativa de melhorar o seu desempenho.



O plano de execução, é um auxiliar na análise do desempenho de um SQL e através dele podemos dar início na melhoria de uma query.

Outras ferramentas podem ser utilizadas em conjunto, além do conhecimento da aplicação e do produto que será entregue.

Podemos gerar o plano de execução de um SQL no banco de dados Oracle de algumas formas diferentes, além da forma gráfica gerada pelo OEM.

Abaixo seguem algumas formas de obtermos um plano de execução:


1) Com o set autotrace traceonly explain
Para isso, devemos nos conectar no banco de dados Oracle e:

a) Ativar o trace:

SQL> set autotrace traceonly explain

b) Em seguida, devemos "colar" ou digitar o comando SQL que queremos ter o plano de execução. 

Ex.:

SQL> set autotrace traceonly explain 
 SELECT * FROM DBA_TABLES;


2) Com o explain plan for

Para isso, devemos nos conectar ao banco de dados Oracle e:

a) Ativar a geração do plano 

SQL>explain plan for

b) Em seguida, devemos "colar" ou digitar o comando SQL que queremos ter o plano de execução

 Ex.:

SQL> explain plan for
 SELECT * FROM DBA_TABLES;


c) Em seguida executar o comando abaixo:

SQL> @?/rdbms/admin/utlxpls 


3) Gerar plano de execução através de um SQL_ID


Para isso, devemos nos conectar ao banco de dados Oracle e precisamos identificar o SQL_ID do SQL que queremos obter o plano de execução.

Para obtermos o SQL_ID desejado, podemos consultar a V$SESSION no caso do SQL estar em execução ou ainda a V$SQL, V$SQLAREA para tentarmos obter o SQL_ID de uma execução passada.


Com o SQL_ID em mãos podemos obter o plano de execução da seguinte forma: 

set lines 300
set pages 49000 
set long 2000000000

SELECT * FROM TABLE(dbms_xplan.display_awr('a93d1njnfsyvn')); 


4) - Gerar plano de execução de SQLs com variáveis BIND 

Para SQL com variável BIND, devemos ter em mãos o SQL que queremos obter o plano de execução, e:

a) Ativar o trace:

SQL> explain plan FOR


b) Em seguida, devemos "colar" ou digitar o comando SQL que queremos ter o plano de execução.

 Ex.:
SQL> explain plan FOR
 SELECT * FROM DBA_TABLES;


c) Em seguida executar o comando abaixo:

SQL> select plan_table_output from table(dbms_xplan.display('plan_table',null,'ALL'));