[pgbr-geral] Res: Res: Res: Analise de uso de index entre 8.2 ou 8.3

2009-07-31 Por tôpico paulo matadr
Boa tarde euler,
nao houve mudanca no plano..fui ate 64 de work e nada





De: Euler Taveira de Oliveira eu...@timbira.com
Para: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Enviadas: Quarta-feira, 29 de Julho de 2009 18:14:19
Assunto: Re: [pgbr-geral] Res: Res: Analise de uso de index entre 8.2 ou 8.3

paulo matadr escreveu:
 Os parametros do servidor aparentemente importantes sao:
 
Qual é o valor de work_mem? Você tentou fazer:

SET work_mem to 16MB;
EXPLAIN ANALYZE SELECT ...;
SET work_mem to 8MB;
EXPLAIN ANALYZE SELECT ...;
SET work_mem to 32MB;
EXPLAIN ANALYZE SELECT ...;

O plano mudou?

Outra coisa é que você está utilizando LEFT JOIN em todas as junções. Eles são
realmente necessários ou tem algum deles que pode ser um INNER JOIN (aqueles
cuja chave estrangeira não pode ser nula)? Junções externas *não* restringem
tanto o conjunto de dados quanto junções internas e, tendem a ser mais custosas.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



  

Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Res: Res: Res: Analise de uso de index entre 8.2 ou 8.3

2009-07-31 Por tôpico Charly Frankl
Paulo, boa tarde...

No teu email inicial, você disse que criou o indice xix1_cliente em desenv e
resolveu, mas não resolveu em produção. Olhando o teu explain, podemos ver
que um dos pontos de impacto, como falado anteriormente é a entidade
logradouro_bairro:

Desenv:
  -  Index Scan using logradouro_bairro_pkey on
logradouro_bairro logradouro3_  (cost=0.00..6.07 rows=1 width=8) (actual
time=9.047..9.048 rows=1 loops=284) Index Cond: (logradouro3_.lgbr_id =
clienteend2_.lgbr_id)

Produção:
-  Seq Scan on logradouro_bairro
logradouro3_  (cost=0.00..2033.86 rows=117186 width=8) (actual
time=0.011..359.858 rows=117186 loops=1)

Temos um acesso sequencial ai... E nesse ponto, o custo da consulta comeca a
ficar muito elevada.

Dá uma olhada nessa entidade em produção... Se para o atributo em questão
você tem um indice...

Outra coisa, para melhorar um pouco o banco na hora do parse, inverta a
ordem dos atributos no teu relacionamento (o analisador de consultas
provavelmente vai fazer isso pra vc, mas não custa nada dar uma
maozinha... rsss), algo como:

select count(distinct cliente0_.clie_id) as col_0_0_
from cadastro.cliente cliente0_
left outer join cadastro.cliente_tipo clientetip1_ on
clientetip1_.cltp_id = cliente0_.cltp_id
left outer join cadastro.cliente_endereco clienteend2_ on
clienteend2_.clie_id = cliente0_.clie_id
left outer join cadastro.logradouro_bairro logradouro3_ on
logradouro3_.lgbr_id = clienteend2_.lgbr_id
left outer join cadastro.bairro bairro4_ on bairro4_.bair_id =
logradouro3_.bair_id
left outer join cadastro.municipio municipio5_ on municipio5_.muni_id =
bairro4_.muni_id
where (upper(cliente0_.clie_nmcliente) like 'EDNALDO F%') and
municipio5_.muni_id=960


Considere também a possibilidade de substituir os left outer join por
inner join (como falado tb), claro se a lógica do sistema permitir... Pois
o custo de outer joins pro banco é alto...

Espero ter ajudado.


Att,


-- 
Charly Frankl
http://javadevilopers.blogspot.com/
charlyfra...@gmail.com
Linux user #391083


2009/7/31 paulo matadr saddon...@yahoo.com.br

 Boa tarde euler,
 nao houve mudanca no plano..fui ate 64 de work e nada

 --
 *De:* Euler Taveira de Oliveira eu...@timbira.com
 *Para:* Comunidade PostgreSQL Brasileira 
 pgbr-geral@listas.postgresql.org.br
 *Enviadas:* Quarta-feira, 29 de Julho de 2009 18:14:19
 *Assunto:* Re: [pgbr-geral] Res: Res: Analise de uso de index entre 8.2 ou
 8.3

 paulo matadr escreveu:
  Os parametros do servidor aparentemente importantes sao:
 
 Qual é o valor de work_mem? Você tentou fazer:

 SET work_mem to 16MB;
 EXPLAIN ANALYZE SELECT ...;
 SET work_mem to 8MB;
 EXPLAIN ANALYZE SELECT ...;
 SET work_mem to 32MB;
 EXPLAIN ANALYZE SELECT ...;

 O plano mudou?

 Outra coisa é que você está utilizando LEFT JOIN em todas as junções. Eles
 são
 realmente necessários ou tem algum deles que pode ser um INNER JOIN
 (aqueles
 cuja chave estrangeira não pode ser nula)? Junções externas *não*
 restringem
 tanto o conjunto de dados quanto junções internas e, tendem a ser mais
 custosas.


 --
   Euler Taveira de Oliveira
   http://www.timbira.com/
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

 --
 Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 
 10http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/-
 Celebridadeshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/-
 Músicahttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/-
 Esporteshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/

 ___
 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