Re: [pgbr-geral] tutorial e dicas de explain analyze
2017-09-22 10:39 GMT-03:00 Luiz Henrique: > " -> Sort (cost=358689.48..359569.53 rows=352018 width=287) (actual > time=101865.979..103271.970 rows=2631834 loops=1)" > O plano está gastando ~86% do tempo da consulta nessa ordenação. Você realmente precisa de um DISTINCT ali? O que você pode fazer é tentar aumentar o work_mem para essa consulta (um valor superior a ~ 715MB) na tentativa de fazer uma ordenação mais rápida. Com essa quantidade de registros retornados não vejo como acelerar muito essa consulta. -- Euler Taveira Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] tutorial e dicas de explain analyze
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: > 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:
Re: [pgbr-geral] tutorial e dicas de explain analyze
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,
[pgbr-geral] tutorial e dicas de explain analyze
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