- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 2 meses atrás por
Regis Araujo.
-
AutorPosts
-
6 de janeiro de 2012 às 4:58 pm #102387
tiagoasa
ParticipanteBom dia pessoal,
Sou novo aqui no forum, e já venho solicitar ajuda de vocês.
Estou passando pela seguinte situação a 3 meses, algumas selects estão mudando o plano de execução, e esse novo plano assumido deixa as selects uma carroça, o que deu para perceber é que essas mudanças ocorrem logo nas primeiras execuções após a coleta de estatística. Mas o estranho é que é mais frequente do final para o início de mês. ex dia 30 à 05. Justamente em período de fechamento mensal, em alguns casos ocorre em alguns outros períodos do mês, e em todos os casos a select problemática não se repete.
A solução reativa adotada é de identificar qual a select problemática e recoletar as estatísticas para as tabelas envolvidas.
E estou a tempo procurando uma solução definitiva para esse problema, pois ainda não descobri de fato a causa raiz, e o porque desse comportamento do banco.
Esse problema começou a ocorrer após migração do banco de 9i para 10g, no 9i não presenciamos o problema.
Alguém já passou por algo parecido e consegue me dar uma luz?
Oracle 10.2.0.4
Otimizador esta como CHOOSE
Coleta de estatísticas diáriaAbraços
6 de janeiro de 2012 às 5:28 pm #102388Regis Araujo
Participante@tiagoasa bom dia..!
Cara.. uma duvida.. por qual motivo você gera estatistica todos os dias? Gerar estatistica vai realmente fazer o banco mudar o plano de execução..
Uma outra coisa que vc pode fazer.. é gerar um AWR comparativo.. verificando um dia q o select roda bem com o dia que o select roda com problemas, assim vc vai poder identificar as mudanças que houveram..!!
Outra saida é vc gerar uma baseline quando o select roda normal e deixar esta baseline setada no select, desta maneira o oracle vai sempre usar aquele plano de execução.
Vai postando oq vc puder.. q vamos tentar te ajudar…
Abraços..!
6 de janeiro de 2012 às 7:18 pm #102394tiagoasa
ParticipanteOla Thunder, obrigado pelo retorno.
Essas comparações e insumos eu tiro do awr, o fato de se coletar estatísticas todo dia é pelo volume operações, concordo com você que existe tabelas que não seria necessário a coleta diária, tipo tabelas de cadastro.
Da só uma olhada no comportamento da select com as mudanças de plano de execução, a maioria dos indicadores vai para casa do chapéu. E depois que o plano volta ao anterior tudo fica lindo.
Abraços
6 de janeiro de 2012 às 8:09 pm #102397Regis Araujo
ParticipanteOla Thiago..!!
Cara.. realmente há uma discrepância tremenda em horários bem próximos..
As tabelas que são usadas neste select sofrem muita alteração? Alterações em lote? Existe alguma configuração diferenciada no seu banco algum VPD?
Existe alguma carga que ocorre no mesmo horário das estatisticas?
Vc ja tentou colocar hints no select para fazer um teste??
Eu tenho problemas também nos períodos de fechamento, mas devido a alta carga de processamento que ocorre neste periodo.
Estou pensando aqui mas está díficil imaginar o que pode estar ocasionando isto..
—off topic—
Estas informações que vc postou acima, é de alguma ferramenta ou select que vc tem?
—–Abraços..!
6 de janeiro de 2012 às 8:29 pm #102399tiagoasa
ParticipanteÉ então, essas mudanças ocorre em outros períodos do mês também, mas como o volume de processamento é menor, quase não aparece, e olha que temos fechamento semanal, quinzenal e mensal. Mas o que pega mesmo é o mensal, mais por volume de processamento.
Acho que a utilização de hints resolveria meu problema, porém o sistema é herdado e é muito grande e demandaria muito tempo.
Será se eu alterar o otimizador para ALL_ROWS ou FIRST_ROWS terei um resultado diferente do CHOOSE?
Ta dificil achar a causa raiz. hehehe
Referente ao questionamento dos dados extraídos, eu uso uma select mesmo nas tabelas dba_hist*.
select snap.snap_id “Snapshot”,
to_char(begin_interval_time, ‘dd/mm/yyyy hh24:mi:ss’) “Interval”,
sql_id “SQL”,
stat.plan_hash_value,
executions_delta “Execs”,
buffer_gets_delta “Buffer Gets”,
round(cpu_time_delta / 1000000) “CPU Time”,
disk_reads_delta “Disk Reads”,
iowait_delta “IO Wait”,
apwait_delta “Wait App”,
ccwait_delta “Wait Concur”
from dba_hist_snapshot snap, dba_hist_sqlstat stat
where snap.snap_id = stat.snap_id
and snap.snap_id >= &SNAPSHOT_ID
order by 1 desc;6 de janeiro de 2012 às 8:43 pm #102400Regis Araujo
ParticipanteTiago..
De uma lida neste artigo do Bulerson.. ele explica as opções…
http://www.dba-oracle.com/t_optimizer_m … _plans.htm
Eu sempre utilizo a opção ALL_ROWS.
Faça um teste, rode apenas nas tabelas envolvidas neste select com a opção ALL_ROWS e monitore por um tempo, verifique se houve melhoria.
Abraços..!
-
AutorPosts
- Você deve fazer login para responder a este tópico.
