pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Pepe Barbe <elventear@gmail.com>
To: pgsql-performance@postgresql.org
Subject: Join performance
Date: Thu, 8 Nov 2007 16:47:09 -0600
Message-ID: <2ACEBABD-7853-475B-B8C0-91B654AF143D@gmail.com> (raw)

Hello,

I am having an issue on PostgreSQL 8.0.12. In the past we had  
performance issues with the query planner for queries on some tables  
where we knew we had indexes and it was doing a sequential scan, and  
for this reason we issue "SET enable_seqscan = FALSE" for some queries.

Recently we have stumbled upon one of these kind of queries that is  
giving terrible performance, because seqscan is disabled. I've reduced  
the problem to a a command like this one:

SELECT * from gsm_sector_metrics NATURAL JOIN gsm_amr_metrics INNER  
JOIN temp_busy_hr USING(start_time,bsc_id,sect_id);

Where temp_busy_hr is a temporary table.

If the previous is issued with seqscan TRUE, it runs within reasonable  
time, else it runs for ever. The query plan for the previous query  
with enable_seqscan = TRUE:

QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Limit  (cost=0.00..384555.98 rows=1 width=3092)
   ->  Nested Loop  (cost=0.00..384555.98 rows=1 width=3092)
         Join Filter: (("inner".bsc_id = "outer".bsc_id) AND  
("inner".site_id = "outer".site_id) AND ("inner".sect_id =  
"outer".sect_id))
         ->  Nested Loop  (cost=0.00..368645.64 rows=28 width=1192)
               Join Filter: (("outer".sect_id = "inner".sect_id) AND  
("outer".bsc_id = "inner".bsc_id))
               ->  Seq Scan on temp_busy_hr  (cost=0.00..24.00  
rows=1400 width=24)
               ->  Index Scan using gsm_amr_start_time_idx on  
gsm_amr_metrics  (cost=0.00..226.66 rows=2094 width=1168)
                     Index Cond: ("outer".start_time =  
gsm_amr_metrics.start_time)
         ->  Index Scan using gsm_sector_start_time_idx on  
gsm_sector_metrics t1  (cost=0.00..528.77 rows=1973 width=1936)
               Index Cond: (t1.start_time = "outer".start_time)
(10 rows)

and the plan for enable_seqscan = FALSE:

QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Limit  (cost=100000097.16.. 100720844.011111 rows=1 width=3092)
   ->  Nested Loop  (cost=100000097.16..100720844.01 rows=1 width=3092)
         Join Filter: (("inner".bsc_id = "outer".bsc_id) AND  
("inner".site_id = "outer".site_id) AND ("inner".sect_id =  
"outer".sect_id))
         ->  Merge Join  (cost=100000097.16..100704933.67 rows=28  
width=1192)
               Merge Cond: ("outer".start_time = "inner".start_time)
               Join Filter: (("inner".sect_id = "outer".sect_id) AND  
("inner".bsc_id = "outer".bsc_id))
               ->  Index Scan using gsm_amr_start_time_idx on  
gsm_amr_metrics  (cost=0.00..631211.45 rows=6005551 width=1168)
               ->  Sort  (cost=100000097.16..100000100.66 rows=1400  
width=24)
                     Sort Key: temp_busy_hr.start_time
                     ->  Seq Scan on temp_busy_hr   
(cost=100000000.00..100000024.00 rows=1400 width=24)
         ->  Index Scan using gsm_sector_start_time_idx on  
gsm_sector_metrics t1  (cost=0.00..528.77 rows=1973 width=1936)
               Index Cond: (t1.start_time = "outer".start_time)
(12 rows)

Any ideas what could I try to fix this problem?

Thanks,
Pepe



view thread (7+ messages)  latest in thread

Message-ID: <2ACEBABD-7853-475B-B8C0-91B654AF143D@gmail.com>
Permalink:  ../2ACEBABD-7853-475B-B8C0-91B654AF143D@gmail.com/
Also on:    postgresql.org/message-id/2ACEBABD-7853-475B-B8C0-91B654AF143D@gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: elventear@gmail.com
  Subject: Re: Join performance
  In-Reply-To: <2ACEBABD-7853-475B-B8C0-91B654AF143D@gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox