Oracle não está a optimizar pesquisas

xuxaki

Power Member
Boas,
estou a testar a performance do motor de bases de dados Oracle 10g.
Pensei que iria ter problemas em fazer testes sem optimizações, pois teria de estar sempre a limpar a memória (pois o Oracle iria tentar optimizar tudo ao máximo), mas o que me está a acontecer é o oposto! O Oracle não está a optimizar nada, demora sempre +/- o mesmo tempo a executar a mesmo query! >(

Alguém me sabe o dizer o que se passa?
 
Já consultaste os planos de execução eleitos pelo SGBD? Uma hipótese para aumento de performance é a criação de indices sobre os campos utilizados nas queries.
 
Mas a intenção é mesmo ver a diferença entre tempos de execução de querys com e sem índices. Vou fazer o explain plan, mas não me parece que haja algum tipo de indicação sobre carregar dados para memória..
 
Pois, não me expliquei nesse aspecto...
O teste que estou a fazer é:
1- tabelas sem quaisquer índices ou chaves. Fazer as pesquisas e medir os tempos. Esses tempos deveriam melhorar à medida que fosse executada a mesma query repetidamente, o que não está acontecer!! (o meu problema portanto...)
2- inserir os índices e executar as mesmas querys de 1 e verificar a diferença de performance.

Mas não percebo porquê, no ponto 1 os tempos estão sempre semelhantes, não está a carregar os dados para a memória!
 
Quantos registos tem as tabelas de testes? E quantos tupulos são retornados nas pesquisas? os tupulos vem completos ou só vem as colunas pertinentes?
 
Acho que já sei o que se passa. A consulta em causa é bastante complexa, pois tem muitas restrições e a consulta é feita a várias tabelas. Então o que eu penso estar acontecer é o seguinte:
O tempo da pesquisa não pode melhorar muito. Existem muitas restrições e é feita a consulta a várias tabelas em simultâneo, ou seja, basicamente o que acontece é que o Oracle decide fazer full table scan (ler tudo do disco) em todas as tabelas envolvidas, e o tempo que demora é o tempo desses vários full table scan. De modo a evitar estar sempre a encher a memória com full table scans, o Oracle decide utilizar apenas uma pequena porção de memória para a consulta, daí não carregar nada para a memória, e na próxima consulta vai repetir o processo, indo sempre a disco.

Será que me fiz entender? :)
 
Back
Topo