Dicas de Tuning
Olá pessoal, tudo bem?
Aqui vai algumas dicas de Tuning para quem desenvolve e para analista que trabalham com essas operações…
- Verificar as estatísticas das tabelas e dos índices.
- Verificar também possíveis fragmentações nas tabelas.
- Se uma determinada tabela sofre muito DML, talvez seja interessante fazer um Rebuild dos índices, pois isso acaba com a árvore do índice e se for bitmap, com o mapa binário.
- Colocar as tabelas usadas na query na ordem da maior para a menor na cláusula From e na mesma ordem a cláusula Where.
- Verificar a quantidade de registro que é recuperado na query, pois se for em Tela, ou seja, em uma consulta, caso retorne muitos registros, será que é necessário retornar tal quantidade de registro? Podemos usar algum filtro para recuperar registros mais novos de acordo com a regra de negócio, lembrando que é interessante haver índice para não fazer FULL na tabela.
- Verificar colunas que são usadas em muitos processos como filtro na cláusula where para criação de índice para as mesmas.
- Nos filtros de datas, usar trunc e between ou utilizar maior ou igual e menor que + 1 para teste de índices de acordo com a query. Em alguns casos é alterado o plano de execução e passa a utilizar índices.
- Observar sempre ao criar uma query, o relacionamento das tabelas, seguindo sempre pela foreing keys e não pular tabelas nestas relações, pois o Oracle não utilizará índices das Fks.
- Observar também a ordem das colunas e posições indexadas que foram criadas quando for utilizar tais colunas na cláusula where.
- Sempre manter um bom padrão na escrita SQL, principalmente para funções analíticas e agregadoras. SUM, MIN, MAX, AVG e etc…
- Sempre tente pegar pequenas porções de dados (Usar Tabelas e índices particionadas), pois quanto maior a quantidade, maior o tempo. Começe a pensar em SQL MODEL (Isso ajuda em performance) principalmente para report em EXCEL ou SUMARIZADO; Tente sempre criar índices que não satisfaça apenas 1 consulta, e sim 4 ou 5 sqls.
- Em último caso se o plano de execução não há como diminuir o custom da query, poderá ser utilizado o hint PARALLEL(table), assim o processo é executado paralelamente.
- E por último tente minimizar o uso de funções, use a NORMALIZAÇÃO AO SEU FAVOR.
Abraços