Re: [pgbr-geral] Interpretação do explain analyse
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
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
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
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
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
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
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