Pular para o conteúdo

Utilizando o plano de execução: Melhore a performance das suas consultas com o SQL Execution Plan da Oracle !

Utilizando o plano de execução: Melhore a performance das suas consultas com o SQL Execution Plan da Oracle !

Olá, pessoal!

Muitos desenvolvedores principalmente quando estão iniciando a profissão se preoculpam somente em realizar consultas que funcionem retornando os dados desejados, porem devem se preocupar também em garantir que estas consultas tenham o melhor custo possível facilitando a vida do DBA e garantindo mais qualidade nas suas aplicações.Neste artigo vamos utilizar o plano de execução (SQL Execution Plan) da Oracle para verificar a performance das consultas.

Quando um SQL e executado no DB Oracle, o (CBO) Cost based optimizer ou seja otimizador baseado em custo usa as estatísticas do banco de dados para criar um plano de execução que vai ajudar o desenvolvedor a retornar os dados da melhor maneira possível.

O plano de execução é armazenado em uma tabela chamada plan table, mas dependendo dos critérios de instalação do seu banco esta pode não ter sido criada. Caso isto não tenha acontecido vamos cria-la. Abaixo você verá como criar a tabela no usuário SYS e deixa-la disponível para todos os usuários.O script de criação desta tabela ficam na pasta onde foi instalado seu BD, ou seja no seu oracle home.

\ORACLE_HOME \product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql

Para executar o script acesse o banco pelo usuário SYS

SQL>CONN sys/password AS SYSDBA

Após conectado executa-se o script

SQL> @$ORACLE_HOME\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql;

Para liberar deixar disponível para todos os usuários de os grant’s e crie um sinônimo.

SQL> Grant all on sys.plan_table to public;

Grant succeeded.

SQL> Create public synonym plan_table for sys.plan_table;

Agora a tabela esta pronta para ser utilizada!

O Plano de execução ou Explain Plan quando executado grava as informações de performance na tabela plan table sem executar a query. Ela apenas coleta os dados estatísticos e mostra um plano de execução evitando que consultas muito pesadas ou mal projetadas efetem a performance do banco sobrecarregando a memória. Para executar o plano de execuçãoutilizamos o comando explain plan for select * from <tabela> where <condição>. Porem para que você saiba se o plano de execução que será mostrado e o seu, deve-se colocar o comando set statement id = ‘ID’ .O ID escolhido equivale a coluna statement_id da tabela Plan_table que tem o formato Varchar2(30).

Com isso o comando para gerar o plano de execução ficaria assim:

SQL>explain plan SET STATEMENT_ID='ID' for Select * From <TABELA>

Depois para visualizar o plano utilizamos a procedure display da package DBMS_XPLAN.

SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','ID','ALL'));

Exemplo:

SQL> select plan_table_output from table(dbms_xplan.display('plan_table','TESTE','serial'));

PLAN_TABLE_OUTPUT

Plan hash value: 3956160932

| Id  | Operation                  | Name | Rows  | Bytes | Cost |

|   0 | SELECT STATEMENT  |           |    14    |   518 |      3 |

|   1 |  TABLE ACCESS FULL | EMP    |    14    |   518 |      3 |

Podemos então identificar que caso façamos essa consulta no nosso banco iremos acessar a tabela completa (TABLE ACCESS FULL), serão retornadas 14 linhas (Rows) com um uso de 518 bytes e um custo (Cost) igual a 3.

Rodrigo Mesquita

Rodrigo Mesquita

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress