From: | Kevin Goess <kgoess(at)bepress(dot)com> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | simple query with radically different plan after 9.0 -> 9.2 upgrade |
Date: | 2013-09-20 23:46:50 |
Message-ID: | CABZkbxixGeyNTFOOt5HCRvOnNPdN4G_MARF4tvy0BK-E6yt4hg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Given this table
articles_1=> \d hits_user_daily_count;
Table "public.hits_user_daily_count"
Column | Type | Modifiers
---------------------------+---------+-----------
userid | integer | not null
date | date | not null
num_hits | integer | default 0
num_cover_page_hits | integer | default 0
num_additional_files_hits | integer | default 0
Indexes:
"hits_user_daily_count_pkey" PRIMARY KEY, btree (userid, date)
"hits_user_daily_count_date" btree (date)
whose data looks like this:
articles_1=> select * from hits_user_daily_count limit 5;
userid | date | num_hits | num_cover_page_hits |
num_additional_files_hits
---------+------------+----------+---------------------+---------------------------
1590185 | 2013-07-10 | 3 | 4 |
0
391907 | 2013-07-10 | 16 | 12 |
0
1739541 | 2013-08-03 | 1 | 0 |
0
1798435 | 2013-07-10 | 0 | 1 |
0
1521468 | 2013-07-10 | 2 | 0 |
0
We noticed a big change after upgrading from 9.0 to 9.2. For
*yesterday‘s*date, the query plan is fine, like you’d expect
articles_1=> explain (analyze, buffers) select 1
from hits_user_daily_count
where userid = 1590185 and date = '2013-07-30';
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using hits_user_daily_count_pkey on
hits_user_daily_count (cost=0.00..8.02 rows=1 width=0) (actual
time=0.02
Index Cond: ((userid = 1590185) AND (date = '2013-07-30'::date))
Heap Fetches: 1
Buffers: shared hit=5
Total runtime: 0.044 ms
but for *today‘s* date it looks like it’s reading all the rows for that
date, 15,277 buffers:
articles_1=> explain (analyze, buffers) select 1
from hits_user_daily_count
where userid = 1590185 and date = '2013-08-01';
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Index Scan using hits_user_daily_count_date on hits_user_daily_count
(cost=0.00..7.92 rows=1 width=0) (actual time=11.957..1
Index Cond: (date = '2013-08-01'::date)
Filter: (userid = 1590185)
Rows Removed by Filter: 20149
Buffers: shared hit=15277
Total runtime: 17.924 ms
(The dates in the queries are old because I've had this email in draft for
a while, but the behavior is still identical).
We‘ve addressed the problem by running ’analyze' on the table every day ate
about 1:30am. Buffer hits on that table go from about 1,000/sec to
70,000/sec between midnight and that analyze job, and then go back down to
1,000/sec and stay flat until midnight rolls around again.
Before the 9.0 -> 9.2 upgrade, the behavior would be flat all day.
Any ideas what would be causing that problem?
From | Date | Subject | |
---|---|---|---|
Next Message | Jayadevan M | 2013-09-21 04:24:13 | Re: Postgres 9.3 Installation Problems Windows 7 64 Bit Pro |
Previous Message | Gregory Haase | 2013-09-20 16:51:38 | Re: Partitioning V schema |