Re: Estimates on partial index

From: Victor Yegorov <vyegorov(at)gmail(dot)com>
To: Jeff Janes <jeff(dot)janes(at)gmail(dot)com>, Jim Nasby <Jim(dot)Nasby(at)bluetreble(dot)com>
Cc: "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Estimates on partial index
Date: 2016-08-19 11:31:49
Message-ID: CAGnEbogfr1R7z=yxno+Tt=YXo0u1d80wd5D9Q5Oah98zhwefvA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

2016-08-18 23:06 GMT+03:00 Jeff Janes <jeff(dot)janes(at)gmail(dot)com>:

> It does account for them, but perhaps not perfectly. See "[PERFORM]
> index fragmentation on insert-only table with non-unique column" for
> some arguments on that which might be relevant to you.
>

Thanks for pointing this out, good stuff to know.

If you can come up with a data generator which creates data that
> others can use to reproduce this situation, we can then investigate it
> in more detail.
>

I do not think this has any value anymore. I have reconfigured the server:
- r_p_c returned to the default 4.0
- turned on track_io_timing
- reindexed all indexes on the table
- went with the suggestion from Jim about partial index on `due_date`,
although
delayed it a bit to get a better view on the situation

Running several explains in a row produces the following:

Index Scan using idx_loan_agreemnets_loan_id_cond_is_current_true on
loan_agreements la (cost=0.42..21469.40 rows=224331 width=13) (actual
time=0.040..2687.422 rows=216440 loops=1)
Filter: ('2016-08-11'::date > due_date)
Rows Removed by Filter: 21806
Buffers: shared hit=226670 read=692 dirtied=48
I/O Timings: read=9.854
Planning time: 1885.219 ms
Execution time: 2712.833 ms

Index Scan using idx_loan_agreemnets_loan_id_cond_is_current_true on
loan_agreements la (cost=0.42..21469.40 rows=224331 width=13) (actual
time=426.027..2273.617 rows=216440 loops=1)
Filter: ('2016-08-11'::date > due_date)
Rows Removed by Filter: 21806
Buffers: shared hit=227276
Planning time: 0.175 ms
Execution time: 2296.414 ms

Index Scan using idx_loan_agreemnets_loan_id_cond_is_current_true on
loan_agreements la (cost=0.42..21469.40 rows=224331 width=13) (actual
time=0.034..297.113 rows=216440 loops=1)
Filter: ('2016-08-11'::date > due_date)
Rows Removed by Filter: 21806
Buffers: shared hit=227276
Planning time: 0.173 ms
Execution time: 310.509 ms

Index Scan using idx_loan_agreemnets_loan_id_cond_is_current_true on
loan_agreements la (cost=0.42..21469.40 rows=224331 width=13) (actual
time=0.031..286.212 rows=216440 loops=1)
Filter: ('2016-08-11'::date > due_date)
Rows Removed by Filter: 21806
Buffers: shared hit=227276
Planning time: 0.163 ms
Execution time: 299.831 ms

This makes me think, that IO is not my issue here and, honestly, I have no
clue what can be behind this.

What I noticed — queries do experience this kind of hiccups from time to
time. CPU and IO monitoring shows no spikes at all, CPU is below 40% all
the time.
Currently I am trying to find out ways how to track down what's going on
here.

Still — thanks everyone for the feedback, it was valuable for me!

--
Victor Y. Yegorov

In response to

Browse pgsql-performance by date

  From Date Subject
Next Message Victor Yegorov 2016-08-19 12:50:55 Re: Estimates on partial index
Previous Message Ashish Kumar Singh 2016-08-19 04:21:16 Re: Estimates on partial index