Re: [pgbr-geral] Interpretação do explain analyse

2009-08-14 Por tôpico Mozart Hasse
Oi Rauni,

 Obrigado pela sua explicação, vou testar isso aqui, existe alguma outra
 possibilidade sem criar as tmp tables??

Pouco provável. Criei índices para todas as combinaçoes de campos usadas 
na consulta, além de tentar mexer na sintaxe dela para ver se o otimizador
tentava outro plano. Nada funcionou, mesmo em tabelas sem atualização, com
CLUSTER, VACUUM e ANALYZE. Talvez (eu disse TALVEZ) o otimizador resolva
usar um índice se você trocar essa consulta gigante pelas 28 consultas
individuais, uma para cada linha, o que deixará o desempenho delas juntas
muito melhor do que o dessa consulta. Sim, também acho que contraria o bom 
senso, mas como estamos falando do otimizador do Postgres, as chances são 
boas.

Atenciosamente,

Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-14 Por tôpico Nei Rauni Santos
Legal,

Os textos são bastante atualizados, existe bastante update e insert, delete
não.

estou usando o pg 8.3 autovacum então acho que é automatico ne?

o analyse eu não rodo nao. é o analyse que atualiza as estatisticas?

Nei


2009/8/14 Mozart Hasse mozart.ha...@usa.net

 tentava outro plano. Nada funcionou, mesmo em tabelas sem atualização, com
 CLUSTER, VACUUM e ANALYZE. Talvez (eu disse TALVEZ) o otimizador resolva
 usar um índice se você trocar essa consulta gigante pelas 28 consultas
 individuais, uma para cada linha, o que deixará o desempenho delas juntas
 muito melhor do que o dessa consulta. Sim, também acho que contraria o bom
 senso, mas como estamos falando do otimizador do Postgres, as chances são
 boas.

 Atenciosamente,




-- 
Nei Rauni Santos
nra...@gmail.com
+55 41 85020985
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-14 Por tôpico JotaComm
Opa,

Sim, é o analyze que é o responsável por atualizar as estatísticas do banco.

2009/8/14 Nei Rauni Santos nra...@gmail.com

 Legal,

 Os textos são bastante atualizados, existe bastante update e insert, delete
 não.

 estou usando o pg 8.3 autovacum então acho que é automatico ne?

 o analyse eu não rodo nao. é o analyse que atualiza as estatisticas?

 Nei


 2009/8/14 Mozart Hasse mozart.ha...@usa.net

 tentava outro plano. Nada funcionou, mesmo em tabelas sem atualização, com
 CLUSTER, VACUUM e ANALYZE. Talvez (eu disse TALVEZ) o otimizador resolva
 usar um índice se você trocar essa consulta gigante pelas 28 consultas
 individuais, uma para cada linha, o que deixará o desempenho delas juntas
 muito melhor do que o dessa consulta. Sim, também acho que contraria o bom
 senso, mas como estamos falando do otimizador do Postgres, as chances são
 boas.

 Atenciosamente,




 --
 Nei Rauni Santos
 nra...@gmail.com
 +55 41 85020985

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



[]s
-- 
JotaComm
http://jotacomm.wordpress.com
http://www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-13 Por tôpico Nei Rauni Santos
Oi Hasse,

Obrigado pela sua explicação, vou testar isso aqui, existe alguma outra
possibilidade sem criar as tmp tables??



2009/8/13 Mozart Hasse mozart.ha...@usa.net

 Olá Rauni,

 Um jeito de ensinar SQL para o otimizador do Postgres é o seguinte:

 create index tmp2 on hotel_description_translation (id,lang);

 create temporary table x as
 select d.description_type_id, t.lang, count( t.id ) as count
 from hotel_description_translation as t
 group by t.id, t.lang;

 select d.description_type_id,t.lang
 from x t
 inner join hotel_description_translation d ON ( d.id = t.id );

 Ou seja: crie uma tabela temporária contendo as totalizações, usando apenas
 a tabela filha.
 Essa consulta será simples o suficiente para o otimizador do Postgres usar
 o
 índice e montar os totais rapidamente (a consulta completa pelo visto é
 complicada demais para ele...).
 Depois, sobre uma tabela muito menor, mesmo sem usar índices, o Hash Join
 do
 Postgres vai ter um desempenho mais aceitável.

 Não tenho tuas tabelas, mas com duas minhas de volume e proporção similares
 a resposta foi 5 vezes mais rápida.

 Atenciosamente,

 Mozart Hasse


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Nei Rauni Santos
nra...@gmail.com
+55 41 85020985
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-13 Por tôpico JotaComm
Olá,

Você tem as estatísticas do seu banco atualizadas, isto é, o comando ANALYZE
é executado com qual periodicidade?

Esta sua tabela tem muitas operações de UPDATE e DELETE? De quanto em quanto
tempo você executa um processo de VACUUM? O autovacuum está habilitado?

2009/8/12 Nei Rauni Santos nra...@gmail.com

 Dae pessoal, tenho uma consulta entre 2 tabelas que está demorando bastante
 tempo, gostaria da ajuda de alguém para analisar o resultado do explain
 analize.

 minha query:

 select d.description_type_id, t.lang, count( t.id ) from hotel_description
 as d
 inner join hotel_description_translation as t ON ( d.id = t.id )
 group by d.description_type_id, t.lang

 o pgadmin3 diz que demora 14714 ms para executar essa query, o resultado
 dela é esse:

 4;pt_BR;12183
 3;pt;13326
 8;pt_BR;58957
 5;en;27687
 7;en;20041
 11;en;61
 6;pt;24534
 2;pt_BR;11559
 1;pt_BR;10024
 3;en;33032
 6;en;59706
 7;pt;10176
 11;pt;29
 5;pt;4061
 4;en;28612
 8;en;59726
 2;pt;11559
 1;pt;10024
 5;pt_BR;4061
 7;pt_BR;10176
 11;pt_BR;29
 1;en;23219
 2;en;26297
 8;pt;58957
 3;pt_BR;13326
 4;pt;12183
 6;pt_BR;24534


 estrutura das minhas tabelas:

 CREATE TABLE hotel_description_translation
 (
   id integer NOT NULL,
   lang character varying(5) NOT NULL,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   description text NOT NULL,
   CONSTRAINT pkhotel_description_i18n PRIMARY KEY (id, lang),
   CONSTRAINT fk_hotel_description_i18n_hotel_description FOREIGN KEY (id)
   REFERENCES hotel_description (id) MATCH SIMPLE
   ON UPDATE NO ACTION ON DELETE NO ACTION
 )
 WITH (OIDS=FALSE);

 CREATE TABLE hotel_description
 (
   description_type_id integer NOT NULL,
   hotel_id integer NOT NULL,
   id serial NOT NULL,
   CONSTRAINT pkhotel_description PRIMARY KEY (id))
 WITH (OIDS=FALSE);


 quantidade de registros

 select count(*) from hotel_description; --327819 rows
 select count(*) from hotel_description_translation; --568079 rows


 o explain analyse resultou nisso:


 HashAggregate  (cost=88792.79..88793.09 rows=24 width=11)
   -  Hash Join  (cost=10263.93..84532.20 rows=568079 width=11)
 Hash Cond: (t.id = d.id)
 -  Seq Scan on hotel_description_translation t
 (cost=0.00..57895.79 rows=568079 width=7)
 -  Hash  (cost=4885.19..4885.19 rows=327819 width=8)
   -  Seq Scan on hotel_description d  (cost=0.00..4885.19
 rows=327819 width=8)





 se alguém puder ajudar, não sei se é possível otimizar um pouco mais isso.

 Nei




 --
 Nei Rauni Santos
 nra...@gmail.com
 +55 41 85020985

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



[]s
-- 
JotaComm
http://jotacomm.wordpress.com
http://www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Interpretação do explain analyse

2009-08-12 Por tôpico Nei Rauni Santos
Dae pessoal, tenho uma consulta entre 2 tabelas que está demorando bastante
tempo, gostaria da ajuda de alguém para analisar o resultado do explain
analize.

minha query:

select d.description_type_id, t.lang, count( t.id ) from hotel_description
as d
inner join hotel_description_translation as t ON ( d.id = t.id )
group by d.description_type_id, t.lang

o pgadmin3 diz que demora 14714 ms para executar essa query, o resultado
dela é esse:

4;pt_BR;12183
3;pt;13326
8;pt_BR;58957
5;en;27687
7;en;20041
11;en;61
6;pt;24534
2;pt_BR;11559
1;pt_BR;10024
3;en;33032
6;en;59706
7;pt;10176
11;pt;29
5;pt;4061
4;en;28612
8;en;59726
2;pt;11559
1;pt;10024
5;pt_BR;4061
7;pt_BR;10176
11;pt_BR;29
1;en;23219
2;en;26297
8;pt;58957
3;pt_BR;13326
4;pt;12183
6;pt_BR;24534


estrutura das minhas tabelas:

CREATE TABLE hotel_description_translation
(
  id integer NOT NULL,
  lang character varying(5) NOT NULL,
  created_at timestamp without time zone,
  updated_at timestamp without time zone,
  description text NOT NULL,
  CONSTRAINT pkhotel_description_i18n PRIMARY KEY (id, lang),
  CONSTRAINT fk_hotel_description_i18n_hotel_description FOREIGN KEY (id)
  REFERENCES hotel_description (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);

CREATE TABLE hotel_description
(
  description_type_id integer NOT NULL,
  hotel_id integer NOT NULL,
  id serial NOT NULL,
  CONSTRAINT pkhotel_description PRIMARY KEY (id),
  CONSTRAINT fk_hotel_description_description_type FOREIGN KEY
(description_type_id)
  REFERENCES description_type (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_hotel_description_hotel FOREIGN KEY (hotel_id)
  REFERENCES hotel (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);


quantidade de registros

select count(*) from hotel_description; --327819 rows
select count(*) from hotel_description_translation; --568079 rows


o explain analyse resultou nisso:


HashAggregate  (cost=88792.79..88793.09 rows=24 width=11)
  -  Hash Join  (cost=10263.93..84532.20 rows=568079 width=11)
Hash Cond: (t.id = d.id)
-  Seq Scan on hotel_description_translation t
(cost=0.00..57895.79 rows=568079 width=7)
-  Hash  (cost=4885.19..4885.19 rows=327819 width=8)
  -  Seq Scan on hotel_description d  (cost=0.00..4885.19
rows=327819 width=8)





se alguém puder ajudar, não sei se é possível otimizar um pouco mais isso.

Nei




-- 
Nei Rauni Santos
nra...@gmail.com
+55 41 85020985
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-12 Por tôpico Luiz Rafael Culik Guimaraes
Ola

se vc nao utilizar a clausula where na sua querie, ela vai mesmo dar um full 
table scan, ja que vc nao especificou quais registros vc quer

[]
Luiz
- Original Message - 
From: Nei Rauni Santos
To: Comunidade PostgreSQL Brasileira
Sent: Wednesday, August 12, 2009 3:43 PM
Subject: [pgbr-geral] Interpretação do explain analyse


Dae pessoal, tenho uma consulta entre 2 tabelas que está demorando bastante 
tempo, gostaria da ajuda de alguém para analisar o resultado do explain 
analize.

minha query:

select d.description_type_id, t.lang, count( t.id ) from hotel_description 
as d
inner join hotel_description_translation as t ON ( d.id = t.id )
group by d.description_type_id, t.lang

o pgadmin3 diz que demora 14714 ms para executar essa query, o resultado 
dela é esse:

4;pt_BR;12183
3;pt;13326
8;pt_BR;58957
5;en;27687
7;en;20041
11;en;61
6;pt;24534
2;pt_BR;11559
1;pt_BR;10024
3;en;33032
6;en;59706
7;pt;10176
11;pt;29
5;pt;4061
4;en;28612
8;en;59726
2;pt;11559
1;pt;10024
5;pt_BR;4061
7;pt_BR;10176
11;pt_BR;29
1;en;23219
2;en;26297
8;pt;58957
3;pt_BR;13326
4;pt;12183
6;pt_BR;24534


estrutura das minhas tabelas:

CREATE TABLE hotel_description_translation
(
  id integer NOT NULL,
  lang character varying(5) NOT NULL,
  created_at timestamp without time zone,
  updated_at timestamp without time zone,
  description text NOT NULL,
  CONSTRAINT pkhotel_description_i18n PRIMARY KEY (id, lang),
  CONSTRAINT fk_hotel_description_i18n_hotel_description FOREIGN KEY (id)
  REFERENCES hotel_description (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);

CREATE TABLE hotel_description
(
  description_type_id integer NOT NULL,
  hotel_id integer NOT NULL,
  id serial NOT NULL,
  CONSTRAINT pkhotel_description PRIMARY KEY (id),
  CONSTRAINT fk_hotel_description_description_type FOREIGN KEY 
(description_type_id)
  REFERENCES description_type (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_hotel_description_hotel FOREIGN KEY (hotel_id)
  REFERENCES hotel (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);


quantidade de registros

select count(*) from hotel_description; --327819 rows
select count(*) from hotel_description_translation; --568079 rows


o explain analyse resultou nisso:


HashAggregate  (cost=88792.79..88793.09 rows=24 width=11)
  -  Hash Join  (cost=10263.93..84532.20 rows=568079 width=11)
Hash Cond: (t.id = d.id)
-  Seq Scan on hotel_description_translation t 
(cost=0.00..57895.79 rows=568079 width=7)
-  Hash  (cost=4885.19..4885.19 rows=327819 width=8)
  -  Seq Scan on hotel_description d  (cost=0.00..4885.19 
rows=327819 width=8)





se alguém puder ajudar, não sei se é possível otimizar um pouco mais isso.

Nei




-- 
Nei Rauni Santos
nra...@gmail.com
+55 41 85020985




___
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