Обсуждение: selecting records from a date range

Поиск
Список
Период
Сортировка

selecting records from a date range

От
"Dan Langille"
Дата:
I'm having fun with this one.  It was nice and fast before the vacuum, but 
very 
slow afterwards.  The idea is to get all the records for a given day.

Any clues?

background: Eventually, we'll be doing a INTERVAL addition to compensate
for time zone differences.

fp2migration=# explain analyse
fp2migration-# select commit_log.commit_date
fp2migration-#   from commit_log, commit_log_ports
fp2migration-#  where commit_log.commit_date between ('2002-04-
01'::timestamp)
fp2migration-#                        and ('2002-04-01'::timestamp + 
INTERVAL '1 DAY')
fp2migration-#        and commit_log.id = commit_log_ports.commit_log_id
fp2migration-#  ORDER by commit_log.commit_date desc;
NOTICE:  QUERY PLAN:

Nested Loop  (cost=0.00..20.67 rows=1 width=16) (actual time=0.69..7.77 
rows=52 loops=1) ->  Index Scan Backward using commit_log_commit_date on commit_log  
(cost=0.00..3.08 rows=1 width=12) (actual time=0.31..2.34 rows=163 
loops=1) ->  Index Scan using commit_log_ports_pkey on commit_log_ports  
(cost=0.00..17.53 rows=5 width=4) (actual time=0.02..0.02 rows=0 
loops=163)
Total runtime: 8.27 msec

But after:

Sort  (cost=896.36..896.36 rows=134 width=16) (actual time=593.61..593.86 
rows=52 loops=1) ->  Hash Join  (cost=7.89..891.61 rows=134 width=16) (actual 
time=572.51..586.82 rows=52 loops=1)       ->  Seq Scan on commit_log_ports  (cost=0.00..676.36 rows=41136 
width=4) (actual time=0.09..280.45 rows=41136 loops=1)       ->  Hash  (cost=7.66..7.66 rows=91 width=12) (actual 
time=76.37..76.37 rows=0 loops=1)             ->  Index Scan Backward using commit_log_commit_date on 
commit_log  (cost=0.00..7.66 rows=91 width=12) (actual time=39.75..75.28 
rows=163 loops=1)
Total runtime: 594.39 msec


OUCH.. That's terrible.

The two tables have  27981 and 41136 rows.
The result set is 47 rows

thanks folks.
-- 
Dan Langille
The FreeBSD Diary - http://freebsddiary.org/ - practical examples



Re: selecting records from a date range

От
Tom Lane
Дата:
"Dan Langille" <dan@langille.org> writes:
> I'm having fun with this one.  It was nice and fast before the vacuum, but 
> very 
> slow afterwards.  The idea is to get all the records for a given day.

[ scratches head... ]  I tried to reproduce this, but for me it still
seems to prefer nestloop.  Have you been playing any games with the
planner cost parameters?  What does pg_stats show for these tables?
        regards, tom lane


Re: selecting records from a date range

От
"Dan Langille"
Дата:
On 1 Apr 2002 at 20:43, Tom Lane wrote:

> "Dan Langille" <dan@langille.org> writes:
> > I'm having fun with this one.  It was nice and fast before the vacuum, but 
> > very 
> > slow afterwards.  The idea is to get all the records for a given day.
> 
> [ scratches head... ]  I tried to reproduce this, but for me it still
> seems to prefer nestloop.  Have you been playing any games with the
> planner cost parameters?  

No, I haven't touched them.

> What does pg_stats show for these tables?

There are 9 rows for commit_log and 5 for commit_log_ports... If you want 
them I will extract them into a file and put them on a webpage.

Well, does it help if I say it's back to being fast again?

fp2migration=#
fp2migration=# explain analyse
fp2migration-# select commit_log.commit_date
fp2migration-#   from commit_log
fp2migration-#  where commit_date between ('2002-04-01'::timestamp + 
SystemTimeAdjust())::timestamp
fp2migration-#                        and ('2002-04-01'::timestamp + 
SystemTimeAdjust() + INTERVAL '1 DAY')::timestamp
fp2migration-#  ORDER by commit_log.commit_date desc;
NOTICE:  QUERY PLAN:

Index Scan Backward using commit_log_commit_date on commit_log  
(cost=0.00..6.19 rows=75 width=8) (actual time=0.28..1.95 rows=157 
loops=1)
Total runtime: 2.91 msec

*shrug*

Is there something happening in the background?

I just tried doing another full analyze, but I was unable to reproduce the 
problem.  Is there anything I can provide which might help?
-- 
Dan Langille
The FreeBSD Diary - http://freebsddiary.org/ - practical examples



Re: selecting records from a date range

От
Tom Lane
Дата:
"Dan Langille" <dan@langille.org> writes:
> Is there something happening in the background?

Not unless you've got a cron job running vacuums and/or analyzes ...
        regards, tom lane