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.
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;
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
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
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
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'));
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.
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'));
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'));