From: | Josh Berkus <josh(at)agliodbs(dot)com> |
---|---|
To: | postgres performance list <pgsql-performance(at)postgresql(dot)org> |
Subject: | Strange choice of general index over partial index |
Date: | 2015-01-15 22:30:08 |
Message-ID: | 54B83F70.7080004@agliodbs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
This is an obfuscation and mock up, but:
table files (
id serial pk,
filename text not null,
state varchar(20) not null
... 18 more columns
)
index file_state on (state)
(35GB in size)
index file_in_flight_state (state) where state in (
'waiting','assigning', 'processing' )
(600MB in size)
... 10 more indexes
More important facts:
* state = 'done' 95% of the time. thereform the partial index
represents only 5% of the table
* all indexes and the table are very bloated
* server has 128GB RAM
* Version 9.2.
Given this setup, I would expect the planner to *always* choose
file_in_flight_state over file_state for this query:
SELECT id, filename FROM files WHERE state = 'waiting';
... and yet it keeps selecting file_state based on extremely small
changes to the stats. This is important because the same query, using
file_state, is 20X to 50X slower, because that index frequently gets
pushed out of memory.
What am I missing? Or is this potentially a planner bug for costing?
--
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2015-01-15 23:24:05 | Re: shared_buffers vs Linux file cache |
Previous Message | Jeff Janes | 2015-01-15 22:22:17 | Re: shared_buffers vs Linux file cache |