Existem muitas variáveis para que o Oracle obtenha o melhor plano de execução, mas por vezes isso não acontece, ai que começa a dor de cabeça.

Os meios mais eficazes de garantir um plano de execução é através de um bom modelo de dados e contínuo trabalho com as estatísticas/histogramas, porém é muito raro encontrar implementações que permitam, a utilização de HINTS ou SQL Profiles é um caminho alternativo e eficaz para também garantir bons planos.

As HINTS já conhecemos e reconhecemos sua utilidade, mas por vezes a aplicação é uma caixa-preta sendo difícil a alteração de código, ou é uma framework que têm alguma dinâmica e com isto é quase que impossível de implementar.

Ai vem a velha pergunta dos chefes ou desenvolvimento, não será possível fazer algo na BD??? heheheheheh,,,

Bem, é uma questão polémica….. mas existe um caminho…Outilnes,,,e a partir do 10g…..SQL Profiles….melhorado no 11g para SQL Plan Management (SPM)….

Através dos Advisors do 10g, o próprio Oracle sugere alterações de planos em que você se limita a aceitar…

Bem chega de blá blá blá e vamos a prática:

Para implementar um SQL Profile são necessários dois elementos:

1 – Logicamente, a querie “problemática”, com baixa performance.

2 – Uma querie idêntica, porém com HINTS para melhorar o plano.

Tendo em mãos isso, agora podemos substituir o plano do 2º pelo 1º. Um detalhe aqui é fundamental, o sqlid da 1ª não pode ser variável, ou seja, todas as execuções deve ter uma única sintaxe e para cada alteração que implique na mudança do sqlid, a substituição do plano deverá ser refeita.  😦

A ferramenta fundamental para a implementação de profiles é o dbms_sqltune.import_sql_profile. Existem várias formas de implementação, sendo possível, buscar dados no AWR. Uma das melhores formas foi demonstrada por Kerry Orbone, clique aqui para ver ou esta versão, que eu mais utilizo :-).

Saudações Vascaínas ….