Caros Colegas,

So reportando a solução do problema para futuras pesquisas. O meu problema 
foi resolvido aumentando a variavel de configuração effective_cache_size, 
estava usando valores muito baixos, depois de varias pesquisas e postagens 
nesta e outra listas recebi esta dica e repasso.

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

Marco Aurélio V. da Silva
Prodata Inf. e Cad. Ltda.
MSN: [EMAIL PROTECTED]
Fone: (33) 3322-3082
----- Original Message ----- 
From: "Marco Aurélio V. da Silva" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Tuesday, December 18, 2007 5:12 PM
Subject: [Bulk] Re: [pgbr-geral] [Bulk] Re: [Bulk] Re: Duvida uso de indice 
em query


Complementando mais a informação, devido a pesquisas e testes realizados:
Desabilitando o SeqScan (SET ENABLE_SEQSCAN TO OFF), ai a consulta passa a
usar o indice correto.
Habilitando novamente o seqscan fiz alguns testes e cheguei a 2 querys com
resultados distintos de acordo com o limit usado, segue as mesmas e o
explain de cada:

1) a com pau
explain analyse Select a.CodPagador,b.Descricao
>From Frete01 a Left Outer Join Frete02 b On (a.CodPagador = b.CodCliente)
limit 9364

"Limit  (cost=46619.72..46856.82 rows=9364 width=39) (actual
time=3385.710..3506.379 rows=9364 loops=1)"
"  ->  Merge Left Join  (cost=46619.72..48113.50 rows=58995 width=39)
(actual time=3385.706..3479.509 rows=9364 loops=1)"
"        Merge Cond: ("outer".codpagador = "inner".codcliente)"
"        ->  Sort  (cost=24649.80..24797.29 rows=58995 width=11) (actual
time=1287.219..1305.888 rows=9364 loops=1)"
"              Sort Key: a.codpagador"
"              ->  Seq Scan on frete01 a  (cost=0.00..19974.95 rows=58995
width=11) (actual time=11.057..484.380 rows=59161 loops=1)"
"        ->  Sort  (cost=21969.91..22274.37 rows=121784 width=39) (actual
time=2098.457..2119.401 rows=11976 loops=1)"
"              Sort Key: b.codcliente"
"              ->  Seq Scan on frete02 b  (cost=0.00..8127.84 rows=121784
width=39) (actual time=3.306..384.981 rows=121740 loops=1)"
"Total runtime: 3525.731 ms"



2) a que funciona
explain analyse Select a.CodPagador,b.Descricao
>From Frete01 a Left Outer Join Frete02 b On (a.CodPagador = b.CodCliente)
limit 9363

"Limit  (cost=0.00..46856.62 rows=9363 width=39) (actual
time=11.205..536.761 rows=9363 loops=1)"
"  ->  Nested Loop Left Join  (cost=0.00..295237.26 rows=58995 width=39)
(actual time=11.201..508.936 rows=9363 loops=1)"
"        ->  Seq Scan on frete01 a  (cost=0.00..19974.95 rows=58995
width=11) (actual time=11.057..220.711 rows=9363 loops=1)"
"        ->  Index Scan using frete02_f021 on frete02 b  (cost=0.00..4.65
rows=1 width=39) (actual time=0.021..0.024 rows=1 loops=9363)"
"              Index Cond: ("outer".codpagador = b.codcliente)"
"Total runtime: 551.331 ms"

logo se eu limitar a query a 9363 registros ele usa o indice se limitar a
9364 usa seq scan e demora pra burro, outro teste se na query com limit em
9363 eu der um order by codcliente ele passa a dar seqscan no join.

O que pode ser ?

lembrando que já rodei as rotinas de manutenção. (Vacuum Full, Analyze,
ReindexDb)

Marco Aurélio V. da Silva
Prodata Inf. e Cad. Ltda.
MSN: [EMAIL PROTECTED]
Fone: (33) 3322-3082
----- Original Message ----- 
From: "Marco Aurélio V. da Silva" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Tuesday, December 18, 2007 8:32 AM
Subject: [Bulk] Re: [pgbr-geral] [Bulk] Re: Duvida uso de indice em query


Só complementando, já rodei as rotinas de manutenção do bd, Vacuum, Analyze,
Reindex, e nada.

Fico no aguardo de qualquer sugestão.

Marco Aurélio V. da Silva
Prodata Inf. e Cad. Ltda.
MSN: [EMAIL PROTECTED]
Fone: (33) 3322-3082
----- Original Message ----- 
From: "Euler Taveira de Oliveira" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Monday, December 17, 2007 3:36 PM
Subject: [Bulk] Re: [pgbr-geral] Duvida uso de indice em query


Marco Aurélio V. da Silva wrote:

> Estou com o seguinte problema, ao executar uma determinada query em 2 db
> com
> estruturas iguais mais com dados diferentes eu obtenho resultados
> totalmente
> diferentes com relação ao tempo de execução. Em um vai igual um tiro, em
> outro demora muito, o volume de dados é mais ou menos o mesmo. Rodei um
> explain pra ver o motivo, e vi que em um database usa o indice na hora de
> fazer o relaciomanto entre tabelas, no outro naum. Verifiquei nos 2 db´s e
> vi que o indice existe nos 2, mas em apenas um db é um usado. O que fazer
> ?
>

EXPLAIN ANALYZE, por favor. Desconfio que (i) você não executa ANALYZE
frequentemente, ou seja, estatísticas desatualizadas (ii) o volume dos
dados nos dois sistemas estão fazendo com que algoritmos diferentes
sejam escolhidos.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
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 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a