Radoslaw Stachowiak <radek@alter.pl> writes:
> of course this memory removal of cached index blocks is caused by normal
> queries and their memory (buffer) requirements, but certainly algorithm
> which chose which buffer to remove is a very ineffective on index blocks.
> looks to me that it preffer table-block too much (especially compared
> to index ones)
The buffer management code has absolutely no clue which blocks belong
to indexes and which to tables --- it handles all of them on a uniform
LRU basis.
> with buffers <1000 idx_blks_hit was always smaller than idx_blks_read,
> even by 10 times;
> statio_user_tables showed that hits were larger than reads by
> _great_ amount (factor of 2 and more) - so it shows that shared_buffers
> are used very well on tables but not on indexes :-(
This seems odd, but I wonder whether it is an artifact of some unusual
property of your query workload. You haven't offered enough detail to
let someone else try to reproduce it...
regards, tom lane