Uellinton

A tabela ned_nota_empenho_despesa tem 174.000
A tabela orcamentario_mensal tem 63.000
Ambas com indice


2017-09-22 10:50 GMT-03:00 Uellinton Mendes <[email protected]>:

> Bom Dia Luiz,
>
> Já tentou usar essa ferramenta online?
>
> https://explain.depesz.com/
>
> É muito legal.
>
> Duvida, quantos registros tem mesmo em ned_nota_empenho_despesa e
> orcamentario_mensal?
>
> Essas duas tabelas estão sem indices?
>
> *Uellinton Mendes*
> 11-9-9167-3524 [OI]
>
> Em 22/09/2017 10:39, Luiz Henrique escreveu:
>
> Prezados,
>
> Procuro por links com tutorias aborando o "explain analyze". Como
> interpretar cada linha apresentada por ele. Alguém recomenda algum site ?
>
> Tenho uma consulta aqui com 1,5 minuto de duração e gostaria de tentar
> otimiza-la
> Ao executar o explain analyze não entendi bem onde atuar para melhorar
>
> Segue abaixo o sql e o explain. Toda ajuda será bem-vinda
>
> ### explain analyze
>
> explain analyze select distinct npd.exercicio
>       , npd.unidadegestora
>       , npd.numero
>       , npd.numeronld
>       , nld.numero as nldorigem
>       , nld.numeroned
>       , ned.numero as nedorigem
>       , ned.numeronpf
>       , npf.numero as npforigem
>       , npf.grupo_fin as grupofin
>       , orm.cod_tp_orcamento as tipcre
>       , npd.classiforcamreduz
>       , npd.classiforcamcompl
>       , npd.credor
>       , npd.nomecredor
>       , npd.statusmovbancario
>       , npd.natureza
>       , nld.numeroned as numemp
>       , npd.codigoretencao
>       , npd.dataemissao
>       , npd.dt_etl
>       , npd.servicobancario
>       , npd.bancobeneficiario as banco
>       , npd.agenciabeneficiario as agencia
>       , npd.contabeneficiario as conta
>       , npd.efeito
>       , substring(ned.classiforcamcompl from 24 for 8) as natdespesa
>       , substring(ned.classiforcamcompl from 33 for 2) as fonterec
>       , npd.valor as valor
>       , npd.cpfcnpjcredor
>       , cast(npd.numeronld as integer) as "numliq"
>       , npd.numeronpf
>       , npd.numeronpdordinario
>       , exerciciorestosapagar
> from sefaz_ws.npd_nota_pagamento_despesa npd
> left join sefaz_ws.nld_nota_liquidacao_despesa nld
>      on (npd.exercicio = nld.exercicio
>      and npd.unidadegestora = nld.unidadegestora
>      and npd.numeronld = nld.numero)
> left join sefaz_ws.ned_nota_empenho_despesa ned
>      on (nld.exercicio = ned.exercicio
>      and nld.unidadegestora = ned.unidadegestora
>      and nld.numeroned = ned.numero)
> left join sefaz_ws.npf_nota_programacao_financeira npf
>      on (ned.exercicio = npf.exercicio
>      and ned.unidadegestora = npf.unidadegestora
>      and ned.numeronpf = npf.numero)
> left join sefaz_ws.orcamentario_mensal orm
>      on (npd.exercicio = orm.exercicio and npd.unidadegestora =
> orm.unidadegestora and orm.classif_orcam_reduz = CAST(ned.classiforcamreduz
> AS integer))
> order by npd.exercicio, npd.unidadegestora, npd.numero
>
> #### resultado do explain analyze
>
> "Unique  (cost=358689.48..389491.06 rows=352018 width=287) (actual
> time=101865.980..107098.130 rows=352018 loops=1)"
> "  ->  Sort  (cost=358689.48..359569.53 rows=352018 width=287) (actual
> time=101865.979..103271.970 rows=2631834 loops=1)"
> "        Sort Key: npd.exercicio, npd.unidadegestora, npd.numero,
> npd.numeronld, nld.numero, nld.numeroned, ned.numero, ned.numeronpf,
> npf.numero, npf.grupo_fin, orm.cod_tp_orcamento, npd.classiforcamreduz,
> npd.classiforcamcompl, npd.credor, npd.nomecredor, npd.statusmovbancario,
> npd.natureza, npd.codigoretencao, npd.dataemissao, npd.dt_etl,
> npd.servicobancario, npd.bancobeneficiario, npd.agenciabeneficiario,
> npd.contabeneficiario, npd.efeito, ("substring"((ned.classiforcamcompl)::text,
> 24, 8)), ("substring"((ned.classiforcamcompl)::text, 33, 2)), npd.valor,
> npd.cpfcnpjcredor, npd.numeronpf, npd.numeronpdordinario,
> nld.exerciciorestosapagar"
> "        Sort Method: external merge  Disk: 731704kB"
> "        ->  Hash Left Join  (cost=104246.16..279334.81 rows=352018
> width=287) (actual time=1322.332..6808.805 rows=2631834 loops=1)"
> "              Hash Cond: ((npd.exercicio = orm.exercicio) AND
> (npd.unidadegestora = orm.unidadegestora) AND 
> ((ned.classiforcamreduz)::integer
> = orm.classif_orcam_reduz))"
> "              ->  Merge Left Join  (cost=100158.37..188918.69 rows=352018
> width=290) (actual time=1295.093..3653.514 rows=352018 loops=1)"
> "                    Merge Cond: ((npd.unidadegestora =
> nld.unidadegestora) AND (npd.exercicio = nld.exercicio) AND (npd.numeronld
> = nld.numero))"
> "                    ->  Index Scan using npd_nota_pagamento_despesa_
> idx_gestora_exercicio_numeronld on npd_nota_pagamento_despesa npd
> (cost=0.00..82171.24 rows=352018 width=215) (actual time=0.009..1846.104
> rows=352018 loops=1)"
> "                    ->  Sort  (cost=100158.37..100655.53 rows=198865
> width=83) (actual time=1295.075..1355.207 rows=364791 loops=1)"
> "                          Sort Key: nld.unidadegestora, nld.exercicio,
> nld.numero"
> "                          Sort Method: quicksort  Memory: 32689kB"
> "                          ->  Merge Left Join  (cost=54937.60..82656.83
> rows=198865 width=83) (actual time=749.878..980.454 rows=198865 loops=1)"
> "                                Merge Cond: ((nld.unidadegestora =
> ned.unidadegestora) AND (nld.exercicio = ned.exercicio) AND (nld.numeroned
> = ned.numero))"
> "                                ->  Index Scan using
> nld_nota_liquidacao_despesa_idx_gestora_exercicio_numeroned on
> nld_nota_liquidacao_despesa nld  (cost=0.00..23405.46 rows=198865 width=21)
> (actual time=0.008..77.818 rows=198865 loops=1)"
> "                                ->  Sort  (cost=54937.55..55372.62
> rows=174029 width=70) (actual time=749.864..771.572 rows=200712 loops=1)"
> "                                      Sort Key: ned.unidadegestora,
> ned.exercicio, ned.numero"
> "                                      Sort Method: quicksort  Memory:
> 30617kB"
> "                                      ->  Merge Right Join
> (cost=28198.62..39789.22 rows=174029 width=70) (actual
> time=363.928..494.100 rows=174029 loops=1)"
> "                                            Merge Cond: ((npf.exercicio
> = ned.exercicio) AND (npf.unidadegestora = ned.unidadegestora) AND
> (npf.numero = ned.numeronpf))"
> "                                            ->  Index Scan using
> npf_nota_programacao_financeira_idx on npf_nota_programacao_financeira
> npf  (cost=0.00..7688.10 rows=100339 width=15) (actual time=0.008..30.949
> rows=100339 loops=1)"
> "                                            ->  Sort
> (cost=28198.62..28633.69 rows=174029 width=63) (actual
> time=363.906..384.312 rows=174029 loops=1)"
> "                                                  Sort Key:
> ned.exercicio, ned.unidadegestora, ned.numeronpf"
> "                                                  Sort Method:
> quicksort  Memory: 30617kB"
> "                                                  ->  Seq Scan on
> ned_nota_empenho_despesa ned  (cost=0.00..13050.29 rows=174029 width=63)
> (actual time=0.003..63.878 rows=174029 loops=1)"
> "              ->  Hash  (cost=2991.47..2991.47 rows=62647 width=14)
> (actual time=27.200..27.200 rows=62647 loops=1)"
> "                    Buckets: 8192  Batches: 1  Memory Usage: 2937kB"
> "                    ->  Seq Scan on orcamentario_mensal orm
> (cost=0.00..2991.47 rows=62647 width=14) (actual time=0.006..15.844
> rows=62647 loops=1)"
> "Total runtime: 107298.538 ms"
>
>
>
>
>
>
>
> --
> Atenciosamente,
>
> Luiz Henrique
> "In Medium Est Virtus!"
> "A Virtude está no meio!"
>
>
> _______________________________________________
> pgbr-geral mailing 
> [email protected]https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Atenciosamente,

Luiz Henrique
"In Medium Est Virtus!"
"A Virtude está no meio!"
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a