Caro Matheus,

Primeiramente obrigado pela atenção, analizando a sua resposta verifiquei a 
tabela frete39m e vi que a demora realmente estava nela, criei um indice para a 
mesma e pelo menos este relatório resolveu o problema, estou verificando os 
reports do pgfouine aqui para ver as outras querys lentas, já vi que umas 
outras querys tb estavam com problema no relacionamente com esta tabela e 
aparentemente resolveu tb. Estou analisando aqui as outras.

Desde já agradeço a atenção recebida.

Marco Aurélio V. da Silva
[email protected]
Prodata Informática e Cad. Ltda
(33) 3322-4444

From: Matheus Oliveira 
Sent: Friday, May 3, 2013 10:18 AM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Lentidão em um Servidor

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 
<[email protected]> 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
  [email protected]
  Prodata Informática e Cad. Ltda
  (33) 3322-4444

  _______________________________________________
  pgbr-geral mailing list
  [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
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a