Banco de Dados - Oracle

Analisando Desempenho de Consultas Utilizando Oracle SQL Developer

Oracle SQL Developer é uma ferramenta que nos permite rodar consultas SQL, executando um plano de acesso. Plano este que possibilita fazer uma análise para melhorar o desempenho da consulta.

por Flavio Goncalves Araujo



Oracle SQL Developer é uma ferramenta que nos permite rodar consultas SQL, executando um plano de acesso. Plano este que possibilita fazer uma análise para melhorar o desempenho da consulta. Neste artigo vamos abordar os pontos que devem ser observados.

Abaixo temos a Imagem Oracle SQL Developer, onde passamos a consulta SQL a ser analisada. Esta é uma consulta exemplo que permite trazer os dados cadastrais de um determinado cliente. Apartir dessa consulta iremos ilustrar uma análise, com objetivo de termos forma de melhorar o desempenho da mesma.


Imagem Oracle SQL Developer

Pontos de Analise:

  • Tempo de execução: Esse tempo de execução aparece sobre a toobar conforme a imagem abaixo. Esse tempo tem dois conceitos são eles:

    Conceito Performático e Não Performático: Esse tempo pode ter o conceito de Performático, ou seja, de que a query está retornando a consulta em um tempo rápido dependendo de alguns pontos que devem ser compreendidos. Para uma consultar ser rápida, devem ser levados em consideração a quantidade de dados que estão nas tabelas e os relacionamentos que fazem a estrutura da query. Podemos ter uma consulta pesada que leva um retorno de 01 minuto e ser rápida, pois a mesma possui uma grande quantidade de dados nas tabelas e obedece aos relacionamentos, e uma consulta como essa que estamos exemplificando que tem um retorno de 5,595 segundos e não performática.

    Em nosso exemplo vamos analisar o plano de acesso desta query e identificar os pontos a serem melhorados com o objetivo de buscar ao máximo de performance possível da mesma.


    Imagem Tempo Execução

    Esse tempo destacado foi o tempo gasto de retorno da consulta no banco, apartir desse tempo podemos então analisar nossa consulta. Em nosso exemplo, podemos analisar que é um tempo alto, que pode comprometer a performance dessa query no banco.

  • Plano de Acesso: Para podermos então visualizar o plano de execução da query, temos uma opção Execute Explain Plan, localizado na barra de ferramentas do SQL Developer conforme a imagem abaixo:


    Imagem Opção de Executar Plano Acesso

  • Resultado do Plano Acesso: Na imagem abaixo temos o resultado do plano de acesso da query, onde podemos tomar algumas decisões. Neste caso temos um plano de execução com uma baixa performance.

    Lembrando: O objetivo de nossa query é trazer os dados cadastrais de Cliente. Nessa nossa consulta estamos usando as tabelas:

    Tbl_cliente: Permite trazer os dados dos clientes
    Tbl_compra: Permite trazer os dados das compras dos clientes
    Tbl_estoque: Permite trazer o estoque dos clientes
    Tbl_fornecedor: Permite trazer o fornecedor dos produtos em estoque

    Analisando este plano de acesso conforme imagem abaixo, podemos identificar que os relacionamentos entre as tabelas que estão em negritos precisam ser melhorados. Esses relacionamentos estão nos dizendo que nas tabelas estão ocorrendo.

  • Table Access(Full): Indica tabela está ocorrendo uma leitura em seus dados sem a utilização de índices. Desta forma o custo dessa consulta para o banco torna se robusta dependendo das quantidades de registros que contém na mesma, aumentando o tempo de retorno como vimos na imagem de tempo de execução.

    Dica: Quando temos um plano de acesso de uma query como a de nosso exemplo, que está indicando Table Access, devemos observar a quantidade itens que está na tabela . Pois é esse Table Access que é responsável por deixar a query com um tempo de execução alto conforme a imagem de tempo de execução acima. Sempre quando houver um Table Access na sua consulta e a tabela a qual está ocorrendo esse Table Access possuir uma quantidade de registros superior a 2000 registros é interessante criar um índice para a tabela.


    Imagem Plano Acesso Consulta SQL

    Conclusão:

    Devemos levar em consideração que para obtermos uma boa performance em nossa consultas, temos que garantir um relacionamento confiável, utilizando índices, evitando assim Table Access . Fica com uma dica que se a consulta está com um plano de execução sem ocorrer table acesss, mas está demorando obter o resultado, devido as tabelas possuir uma quantidade grande de itens, utilizamos então stored procedures no banco de dados. As stored procedures permite manter o plano de execução (plano de acesso) em cache do banco. Desta forma ele é executado apartir do cachê do banco de dados, não gerando mais o plano de acesso e obtendo maior performance.

    Fica como dica para o próximo artigo construirmos uma stored procedures para banco de dados Sybase e Oracle, utilizando cursores e os conceitos de como garantir uma boa performance.

    Disponibilidade da Ferramenta:

    A ferramenta Oracle SQL Developer, utilizada nesse artigo pode ser obtida sua versão de teste pelo link http://www.oracle.com/technology/getting-started/sqldev.html.

  • Flavio Goncalves Araujo

    Flavio Goncalves Araujo - MCP pela Microsoft em .Net . Bacharel em Sistemas de Informação .Atualmente trabalhando como Analista de Sistemas no Banco Triângulo S/A , desenvolvendo aplicações web utilizando tecnologia .net , com conhecimento e experiência nas tecnologias da Sybase e Oracle. Colunista do Site Linha de Codigo , DevMedia e MSDN.