Márcio, realmente, o upper e o coalesce impedem o uso do índice no campo.
Sugiro você criar um índice com o campo já maiúsculo e remover o coalesce,
já que me parece não ter muito uso substituir os nulos por '%'
(provavelmente essa cláusula não tem efeito algum na sua consulta, a menos
que ela seja gerada dinamicamente). Faça o mesmo para os demais campos e
rode um analyze novamente, só para garantir. :)

CREATE INDEX ON emitente ((upper(nm_emitentecompleto)));


Para resolver a cláusula em parc.vlr_valor, sugiro você isolar os valores
nulos em uma condição própria, algo como:

(parc.vl_valor between 0 and 999999999* or parc.vl_valor is null*)





Em 4 de abril de 2016 21:07, Márcio A. Sepp <mar...@zyontecnologia.com.br>
escreveu:

>
>
> 2016-04-04 17:47 GMT-03:00 Márcio A. Sepp <mar...@zyontecnologia.com.br>:
>
> > Bom dia,
> >
> >
> > Atualizei um servidor que estava utilizando a versão 9.0 para a 9.4.7
> > e após atualização esta query passou a ficar extremamente lenta.
> >.............
> >
> >
> > Pelo que estou entendendo o problema está no fin_receber_cnt. Mas não
> > to achando o furo.
> > Observem que na versão 9.0 estava funcionando de forma satisfatoria.
> >
>
>
> Atualize as estatísticas com o comando ANALYZE.
> http://www.postgresql.org/docs/9.4/interactive/sql-analyze.html
>
> Por favor, me explique como vc chegou a esta conclusão? diz algo aí que as
> estatísticas estão desatualizadas? (eu não manjo muito da saída do analyze
> e to me batendo nisso a horas).
> Mas eu havia feito todas as manutenções antes de enviar a saída do analyze
> e inclusive peguei o banco e subi numa máquina minha e continua na mesma
> lentidão.
>
> Talvez precise que eu envie mais alguma informação pra ajudar?
>
>
>
> O tempo estimado e o tempo real são muito divergentes, talvez por isso a
> sugestão do analyze, e também porque é praxe que as estatísticas estejam
> desatualizadas.
>
> Utilize [1] para facilitar a visualização, se possível, e cole a URL do
> seu explain.
>
> O problema parece começar em alguns loops e filtros sem índices, mas será
> melhor de visualizar após nos passar o link do explain.
>
> Eu tentei utilizando o resultado que você passou e não deu certo.
>
>
>
> [1] - http://explain.depesz.com/
>
>
>
> Rodei analyze (no banco que subi aqui) agora.
>
>
>
>
>
> http://explain.depesz.com/s/b55L
>
>
>
>
>
>
>
> Fazendo testes, percebi que o problema está nestas duas linhas aqui:
>
>       upper(coalesce(emitente.nm_emitentecompleto, '%')) like
> upper('%consumidor%') and
>
>       coalesce(parc.vl_valor, 0) between coalesce(0, 0) and
> coalesce(999999.99, 999999999) and
>
>
>
> Comentando elas o retorno fica em 2 ms, o que é aceitável.
>
> Tentei retirar os operadores upper e coalesce destas linhas, mas ainda
> continua lento. Fui até as tabelas emitente e parc e criei indices nestas
> colunas, mas tbm não resolveu. Se alguém puder ajudar, agradeço muito.
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a