Oi Marco,

Eu acho que o primeiro passo seria revisar essa tua query.

Você precisa mesmo de todos esses outer joins?
Olhando rapidamente não identifique a necessidade da tabela Frete07 na
query. Precisa mesmo?
A query está fazendo leitura sequencial em frete39m.  Quantos registros tem
essa tabela? E as outras? Quais índices existem na tabela frete39m?

Um bom caminho é tentar ir construindo aos poucos a query.
Primeiro você faz a query apenas com a tabela Frete01 e verifica se o tempo
está ok, depois você vai colocando as outras tabelas...


[]'s
Matheus Mendonça.




On Fri, May 3, 2013 at 9:49 AM, Marco Aurélio V. da Silva <
marcoprod...@gmail.com> wrote:

>   Caros,
>
> Estou enfrentando problema de lentidão em um servidor, e estou com
> dificuldade de encontrar o problema, pois verificando os logs não encontrei
> nenhuma “Hint” lá. Vou postar uma query com explain pra começar, e agraceço
> se puderem me dar um força.
>
> Query:
> SELECT a.DocNumero AS DocNumero,a.DocSerie AS DocSerie,a.DataDespac AS
> DataDespac,a.DataRecebi AS DataRecebi,a.CodFilOrig AS
> CodFilOrig,a.CodFilDest AS CodFilDest,a.CodFilArre AS
> CodFilArre,a.FormaPagam AS FormaPagam,a.ValorApaga AS
> ValorApaga,a.TotalNotas AS TotalNotas,a.Icms AS Icms ,a.Peso AS Peso
> ,a.Volumes AS Volumes ,a.CodPagador AS CodPagador,a.Descricao AS Descricao
> ,a.DtEntrega AS DtEntrega ,0 AS RegMorto ,b.Descricao AS NomePaga ,g.NumDfr
> AS NumDfr ,(CASE WHEN a.DataRecebi IS NULL THEN 0 ELSE
> COALESCE(g.CodFilial,0) END) AS FilBaixa ,' ' AS area FROM Frete01 a LEFT
> OUTER JOIN Frete02 b ON (a.CodPagador = b.CodCliente) LEFT OUTER JOIN
> Frete07 c ON (a.CodFatura = c.CodFatura AND a.SerieFatur = c.SerieFatur)
> LEFT OUTER JOIN Frete39m g ON (a.DocNumero = g.DocNumero AND a.DocSerie =
> g.DocSerie) WHERE a.Datarecebi IS NOT NULL AND a.DataRecebi >= '20130416'
> AND a.DataRecebi <= '20130416' AND a.Docserie <= 'zzzz' AND a.CodFatura =
> '' ORDER BY FilBaixa,Substr(a.Descricao,1,10),Docserie,Docnumero
>
> Explain:
> "Sort  (cost=6761.07..6761.07 rows=1 width=184)"
> "  Sort Key: CASE WHEN (a.datarecebi IS NULL) THEN 0::numeric ELSE
> COALESCE(g.codfilial, 0::numeric) END, substr((a.descricao)::text, 1, 10),
> a.docserie, a.docnumero"
> "  ->  Nested Loop Left Join  (cost=0.00..6761.06 rows=1 width=184)"
> "        Join Filter: (("outer".docnumero = "inner".docnumero) AND
> ("outer".docserie = "inner".docserie))"
> "        ->  Nested Loop Left Join  (cost=0.00..10.68 rows=1 width=164)"
> "              Join Filter: ("outer".codfatura = "inner".codfatura)"
> "              ->  Nested Loop Left Join  (cost=0.00..7.20 rows=1
> width=182)"
> "                    ->  Index Scan using frete01_x04 on frete01 a
> (cost=0.00..3.51 rows=1 width=153)"
> "                          Index Cond: ((datarecebi >= '2013-04-16'::date)
> AND (datarecebi <= '2013-04-16'::date) AND (docserie <= 'zzzz'::bpchar))"
> "                          Filter: (codfatura = ''::bpchar)"
> "                    ->  Index Scan using frete02_unicod on frete02 b
> (cost=0.00..3.68 rows=1 width=40)"
> "                          Index Cond: ("outer".codpagador = b.codcliente)"
> "              ->  Index Scan using frete07_f0701 on frete07 c
> (cost=0.00..3.46 rows=1 width=18)"
> "                    Index Cond: (("outer".seriefatur = c.seriefatur) AND
> (c.codfatura = ''::bpchar))"
> "        ->  Seq Scan on frete39m g  (cost=0.00..4461.15 rows=152615
> width=39)"
>
> Esta é uma das querys que capturei pelo pgfouine que mais estão demorando,
> pelo que parece esta demorando na hora de fazer o “Sort”.
> A base de dados tem 6GB de tamanho, o servidor tem 4GB de memoria,
> processador é um I3, postgresql 8.1.4 (sei que é muito antigo, mas o
> programa que usa ele utiliza um componente pago que só comunica com esta
> versão, ai fico amarrado).
>
> Configurações do postgresql.conf:
> max_connections = 150
> shared_buffers = 39321
> work_mem = 16517
> effective_cache_size = 39321
> random_page_cost = 2
>
> Se tiver alguma coisa para amenizar a situação, desde já agradeço a
> atenção recebida.
>
> Marco Aurélio V. da Silva
> marcoprod...@gmail.com
> Prodata Informática e Cad. Ltda
> (33) 3322-4444
>
> _______________________________________________
> 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