O que é o Oracle Optimizer?

O Oracle Optimizer é o componente do Oracle Database responsável por determinar a forma mais eficiente de executar uma consulta SQL. Ele avalia múltiplos caminhos de acesso aos dados e escolhe o plano de execução com menor custo estimado.

Em um banco de dados complexo, onde consultas podem envolver joins, subconsultas e filtros diversos, o papel do Optimizer é crucial para a performance. Um plano mal escolhido pode aumentar drasticamente o tempo de resposta de uma aplicação.


Tipos de Oracle Optimizer

O Oracle Database possui dois modos de otimização:

1. Rule-Based Optimizer (RBO) [Descontinuado]

Era o modo padrão até versões antigas do Oracle. Ele tomava decisões com base em regras fixas (por exemplo, preferir o uso de índices).

⚠️ Importante: O RBO foi descontinuado a partir do Oracle 10g.

2. Cost-Based Optimizer (CBO)

Atualmente, o Cost-Based Optimizer é o padrão e o único utilizado nas versões modernas do Oracle. Ele se baseia em:

  • Estatísticas da tabela
  • Tamanho estimado do resultado
  • Seleção de índices
  • Parâmetros do sistema e do banco
  • Estimates de CPU e I/O

O CBO avalia todos os caminhos possíveis e atribui um custo numérico a cada plano. O plano com menor custo é selecionado.


Como o Oracle calcula o custo de uma query?

O custo estimado não é um tempo real, mas uma unidade relativa de esforço. O Oracle considera fatores como:

  • Número de linhas a serem lidas
  • Uso de disco versus memória
  • Quantidade de joins
  • Cardinalidade das tabelas
  • Distribuição de dados (via histogramas)

Exemplo prático:

sql
SELECT * FROM clientes WHERE email = 'joao@email.com';

O Oracle pode escolher:

  • Um full table scan, se a tabela for pequena ou o índice estiver desatualizado
  • Um index range scan, se o índice estiver estatisticamente mais eficiente

Ferramentas para analisar o plano de execução

1. EXPLAIN PLAN

Comando que mostra o plano que o Oracle pretende usar:

sql
EXPLAIN PLAN FOR
SELECT * FROM clientes WHERE email = 'joao@email.com';

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

2. Autotrace

Fornece estatísticas reais da execução:

sql
SET AUTOTRACE ON
SELECT * FROM clientes WHERE email = 'joao@email.com';

3. AWR e SQL Monitor

Ferramentas disponíveis via Enterprise Edition e Oracle Enterprise Manager, úteis para análise de queries longas ou problemáticas.


Como melhorar a escolha do plano de execução

Dicas de tuning para o Oracle Optimizer:

  • Atualize estatísticas regularmente com DBMS_STATS
  • Use bind variables para manter o cache de planos estável
  • Crie índices apropriados com base nas consultas mais frequentes
  • Evite funções em colunas indexadas, pois elas impedem o uso do índice
  • Use hints com cautela, apenas quando o Optimizer falha

Conclusão

O Oracle Optimizer é uma peça fundamental para o desempenho de aplicações que usam o Oracle Database. Entender como ele funciona ajuda DBAs e desenvolvedores a escreverem consultas mais eficientes e a resolver problemas de performance com precisão.

Acompanhar e interpretar corretamente o plano de execução Oracle pode evitar gargalos e garantir que os recursos do banco de dados sejam utilizados da melhor forma possível.