Como lidar com as armadilhas ao usar Hints
Este artigo discute como o uso de hints pode interferir no otimizador de consultas do SGBD Oracle. Conheceremos os riscos de seu uso e em quais situações elas podem ser benéficas.
[rotulo-mentoring/] [lead-mentoring]Hints possibilitam ao desenvolvedor indicar explicitamente como o SGBD Oracle deve se comportar ao tentar otimizar consultas SQL.
Sem dúvida, trata-se de um recurso poderoso nas mãos dos desenvolvedores. Contudo, seu uso pode trazer armadilhas e a solução adotada pode se transformar em um grande problema. Neste contexto, este artigo discute em que situações o uso de hints pode ser benéfico e, em qual delas, prejudicial. [/lead-mentoring]
Hints (sugestões) nada mais são que comentários em uma instrução SQL que passam “dicas” para o otimizador do banco de dados Oracle. Via de regra, o otimizador usa essas dicas para escolher o melhor plano de execução para a instrução, a menos que haja alguma condição que impeça esta escolha. É como se “induzíssemos” explicitamente o otimizador de consulta a utilizar um determinado plano de execução.
As Hints foram inicialmente introduzidas no banco de dados na versão Oracle 7, uma época em que os desenvolvedores e DBAs tinham pouquíssimos recursos para contornar os problemas de performance caso o otimizador escolhesse um plano de execução ruim (sim, isso é possível de acontecer, já que esta escolha é feita a partir de algoritmos e diversos fatores podem influenciar para uma escolha equivocada).
Atualmente a Oracle oferece uma série de ferramentas, como o SQL Tuning Advisor, gerenciamento de planos de consulta e também SQL Performance Analyzer, que auxiliam a resolver problemas de performance quando o otimizador não encontra (ou escolhe) um bom plano de execução.
Uma recomendação geral, que particularmente também concordamos, é que sejam utilizadas essas ferramentas em vez de Hints, pois as Hints “forçarão” o uso de determinado plano de execução independente da mudança de comportamento do ambiente (como crescimento do volume de dados, por exemplo).
A ideia em se utilizar as ferramentas é a de encontrar o motivo pelo qual o otimizador esteja escolhendo um plano ineficiente e corrigir esta causa.
Desta forma, mesmo que o comportamento do ambiente se altere, o otimizador continuará escolhendo o melhor plano e não utilizará sempre o mesmo indiscriminadamente.
As Hints devem ser usadas com cuidado e apenas em situações emergenciais onde as estatísticas nas tabelas relevantes estejam atualizadas e o plano de execução escolhido pelo otimizador sem a Hint não for bom. Vale lembrar que alterações no comportamento do banco de dados e também melhorias de desempenho de consultas ou novas implementações no otimizador em versões mais novas do banco de dados podem ter um impacto significativo na maneira como as Hints afetam o otimizador.
Em resumo, caso decida utilizar as Hints em vez das ferramentas de ajuste fornecidas pela Oracle, tenha em mente que qualquer benefício em curto prazo pode não oferecer boa performance a longo prazo.
Como influenciar o otimizador de consultas
De maneira geral, as escolhas feitas pelo otimizador de consultas são adequadas para a maioria das consultas. Porém, em alguns casos o otimizador pode “errar” (normalmente influenciado por algum fator desconhecido), ou ainda pode haver algum caso em que o desenvolvedor ou DBA possuam alguma informação que o otimizador não tem conhecimento (como o comportamento de uma carga de dados, por exemplo). É para estes casos que influenciar o otimizador pode ser uma boa estratégia para garantir uma boa performance."
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo