These are the parameters I have set in postgresql.conf:

work_mem = 128MB
shared_buffers = 1GB
maintenance_work_mem = 1536MB
fsync = off
synchronous_commit = off
effective_cache_size = 2GB

The hardware is a modest one:
CPU: Intel(R) Atom(TM) CPU  230   @ 1.60GHz
RAM: 2GB
HD: 1TV 7200 RPM (WDC WD10EZEX-00RKKA0)

This machine runs a slackware 14.0 dedicated to the Postgresql.

Thank you,
Caio



On Mon, Nov 4, 2013 at 7:26 PM, Igor Neyman <iney...@perceptron.com> wrote:

> From: Caio Casimiro [mailto:casimiro.lis...@gmail.com]
> Sent: Monday, November 04, 2013 4:10 PM
> To: Igor Neyman
> Cc: Jeff Janes; pgsql-performance@postgresql.org
> Subject: Re: [PERFORM] Slow index scan on B-Tree index over timestamp field
>
> Hi Neyman, thank you for your answer.
> Unfortunately this query runs almost at the same time:
>
> Sort  (cost=4877693.98..4877702.60 rows=3449 width=20) (actual
> time=25820.291..25821.845 rows=1640 loops=1)
>   Sort Key: tt.tweet_id
>   Sort Method: quicksort  Memory: 97kB
>   Buffers: shared hit=1849 read=32788
>   ->  Nested Loop  (cost=247.58..4877491.32 rows=3449 width=20) (actual
> time=486.839..25814.120 rows=1640 loops=1)
>         Buffers: shared hit=1849 read=32788
>         ->  Hash Semi Join  (cost=229.62..88553.23 rows=1681 width=8)
> (actual time=431.654..13209.159 rows=597 loops=1)
>               Hash Cond: (t.user_id = relationship.followed_id)
>               Buffers: shared hit=3 read=31870
>               ->  Index Scan using tweet_creation_time_index on tweet t
>  (cost=0.57..83308.25 rows=1781234 width=16) (actual
> time=130.144..10037.764 rows=1759645 loops=1)
>                     Index Cond: ((creation_time >= '2013-05-05
> 00:00:00-03'::timestamp with time zone) AND (creation_time <= '2013-05-06
> 00:00:00-03'::timestamp with time zone))
>                     Buffers: shared hit=1 read=31867
>               ->  Hash  (cost=227.12..227.12 rows=154 width=8) (actual
> time=94.365..94.365 rows=106 loops=1)
>                     Buckets: 1024  Batches: 1  Memory Usage: 3kB
>                     Buffers: shared hit=2 read=3
>                     ->  Index Only Scan using relationship_id on
> relationship  (cost=0.42..227.12 rows=154 width=8) (actual
> time=74.540..94.101 rows=106 loops=1)
>                           Index Cond: (follower_id = 335093362)
>                           Heap Fetches: 0
>                           Buffers: shared hit=2 read=3
>         ->  Bitmap Heap Scan on tweet_topic tt  (cost=17.96..2841.63
> rows=723 width=20) (actual time=21.014..21.085 rows=3 loops=597)
>               Recheck Cond: (tweet_id = t.id)
>               Buffers: shared hit=1846 read=918
>               ->  Bitmap Index Scan on tweet_topic_pk  (cost=0.00..17.78
> rows=723 width=0) (actual time=15.012..15.012 rows=3 loops=597)
>                     Index Cond: (tweet_id = t.id)
>                     Buffers: shared hit=1763 read=632
> Total runtime: 25823.386 ms
>
> I have noticed that in both queries the index scan on
> tweet_creation_time_index is very expensive. Is there anything I can do to
> make the planner choose a index only scan?
>
> Thank you,
> Caio
>
> Just try the following:
>
> SELECT tt.tweet_id, tt.topic, tt.topic_value
>             FROM tweet_topic AS tt  JOIN tweet AS t ON (tt.tweet_id = t.id
>                                                   AND t.creation_time
> BETWEEN 'D1' AND 'D2' AND t.user_id in
>                                          (SELECT followed_id FROM
> relationship WHERE follower_id = N))
>  ORDER BY tt.tweet_id;
>
> And see if it helps with performance.
>
> Regards,
> Igor Neyman
>
> What is your hardware configuration, and Postgres config parameters
> modified from default values?
>
> Regards,
> Igor Neyman
>

Reply via email to