Pergunta

O que indicam para ver uma consulta que tem um baixo custo no plano de explicar, mas uma alta consistente recebe contagem em autotrace? Neste caso, o custo foi nos 100 de ea CR eram na casa dos milhões.

Foi útil?

Solução

O custo pode representar duas coisas diferentes, dependendo da versão e se você estiver executando no modo de custeio baseado em cpu ou não.

Resumidamente, o custo representa essa quantidade de tempo que o otimizador espera que a consulta para executar para, mas é expressa em unidades da quantidade de tempo que uma única leitura bloco leva. Por exemplo, se a Oracle espera um único bloco ler a tomar 1ms e a consulta para tomar 20ms, então o custo é igual a 20.

Consistente recebe não coincidir exatamente com isso por uma série de razões: o custo inclui não consistente (atual) recebe (por exemplo, leitura e escrita de dados temp), o custo inclui tempo de CPU e um get consistente pode ser um multiblock ler, em vez de um único bloco de leitura e, consequentemente, têm uma duração diferente. A Oracle também pode obter a estimativa do custo completamente errado e que poderia acabar exigindo muito mais ou menos consistente recebe do que a estimativa sugeriu.

Um método útil que pode helo explicar desconexões entre plano de execução previsto e desempenho real é "o feedback cardinalidade". Veja esta apresentação: http://www.centrexcc.com/Tuning% 20by% 20Cardinality% 20Feedback.ppt.pdf

Outras dicas

Na melhor das hipóteses, o custo é a estimativa do otimizador do número de I / O do que uma consulta iria realizar. Assim, na melhor das hipóteses, o custo só é susceptível de ser precisas se o otimizador tenha encontrado uma boa plan-- se a estimativa do otimizador do custo está correto e que o plano é ideal, que geralmente significa que você nunca vai se preocupar olhando para o plano porque a consulta vai executar razoavelmente bem.

De acordo fica, no entanto, é uma medida real do número de fica que uma consulta realmente realizado. Assim que é uma referência muito mais precisa para uso.

Embora existam muitas, muitas coisas que podem influenciar o custo, e algumas coisas que podem influenciar o número de consistente fica, provavelmente, é razoável esperar que se você tem um custo muito baixo e um número muito elevado de consistente fica que o otimizador provavelmente está trabalhando com estimativas pobres da cardinalidade dos vários passos (a coluna de linhas na PLAN_TABLE diz que o número esperado de linhas retornadas em cada etapa). Isso pode indicar que você tem em falta ou desatualizado estatísticas, que está faltando alguns histogramas, que seus parâmetros de inicialização ou as estatísticas do sistema está errado, de alguma forma, ou que o CBO tem problemas para algum outro motivo estimar a cardinalidade de seus resultados.

Qual versão do Oracle que você está usando?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top