Regras Essenciais para Tuning Aplicacional em Banco de Dados Oracle – Regras de Ouro
Olá senhores,
Abaixo alguma regrinhas para quem pretende principalmente realizar trabalhos de tuning aplicacional..
Procuro segui-las sempre que desenvolvo esse tipo de trabalho!
Destacando que esses pontos servem apenas como “partida inicial” da análise!
1ª Regra
Deve existir uma igualdade entre todos os caracteres de uma cláusula sendo examinada e uma que já se encontra na shared pool;
Exemplo:
Select * from emp é diferente de SELECT * from emp
2ª Regra
Se bind variables são referenciadas, elas devem ter o mesmo nome nas cláusulas existentes;
Exemplo:
select * from emp where empid = :var1 é diferente de select * from emp where empid = :var2
3ª Regra
Conheça os dados da aplicação. Verifique colunas com boa seletividade. Seletividade é o percentual de linhas na tabela que possuem o mesmo valor. Colunas com baixa seletividade são boas candidatas para índices;
4ª Regra
Colunas candidatas a índices são apenas aquelas que são mencionadas após WHERE e AND, em uma cláusula SQL;
5ª Regra
Independente do conteúdo de uma coluna possuir um grande intervalo de valores, não a use como índice se esta é sempre mencionada através do uso de uma função (exemplo, FLOOR ou ABS), ou manipulacão de string e conversão (exemplo, SUBSTR ou TO_NUMBER);
Exemplo:
SELECT nm FROM empregado WHERE SUBSTR(nm,1,5) = ‘PEDRO’;
6ª Regra
Quando da utilização do otimizador baseado em custo, certifique-se que as tabelas estão analisadas, para obter estatísticas importantes que irão ajudar na seleção de índices que devem ser criados;
7ª Regra
Durante o processo de seleção das colunas para índices compostos, verifique aquelas colunas que são utilizadas no WHERE e AND juntas durante a aplicação. Se elas são utilizadas separadamente no WHERE e AND tanto quanto em conjunto, dois índices simples pode ser melhor;
8ª Regra
Um índice composto somente irá ser utilizado para satisfazer uma query quando a coluna mais acima do índice é mencionada no WHERE ou AND;
Exemplo:
Se existe um índice composto sobre a coluna1 e a coluna2 em uma determinada tabela, a primeira query irá utilizar o índice enquanto a segunda não:
select coluna3 from tabela where coluna1 >= 10;
select coluna3 from tabela where coluna2 >= 10;
Observação Importante:
Foi disponibilizado à partir do Oracle 9i uma forma de acesso (INDEX SKIP SCAN) que permite que um índice possa ser utilizado mesmo que as primeiras colunas do índice composto não tenham sido informadas na cláusula WHERE.
Ps: Comment enviado pelo Eduardo Legatti…Obrigado!!
Abraços
Olá Marcelo,
Irei acrescentar apenas uma pequena informação ou correção quanto à 8ª regra. Foi disponibilizado à partir do Oracle 9i uma forma de acesso (INDEX SKIP SCAN) que permite que um índice possa ser utilizado mesmo que as primeiras colunas do índice composto não tenham sido informadas na cláusula WHERE.
Abraços,
Eduardo Legatti
Grande Marcelão!
Muito boa iniciativa com este Post, muito bom material, meus parabéns.
Forte abraço!!!!
David
Obrigado Eduardo, vou registrar essa!!
Opa marcelo, tudo bom? Ótimo post amigo! Adorei as dicas!
Grande abraço,
Dicas simples e extremamente valiosas.
Mto bom.
Lílian