On Fri, Jan 27, 2012 at 10:05 PM, Jeff Janes <jeff.janes@gmail.com> wrote:
> On Sat, Jan 21, 2012 at 7:31 AM, Simon Riggs <simon@2ndquadrant.com> wrote:
>>
>> Yes, it was. Sorry about that. New version attached, retesting while
>> you read this.
>
> In my hands I could never get this patch to do anything. The new
> cache was never used.
>
> I think that that was because RecentXminPageno never budged from -1.
>
> I think that that, in turn, is because the comparison below can never
> return true, because the comparison is casting both sides to uint, and
> -1 cast to uint is very large
>
> /* When we commit advance ClogCtl's shared RecentXminPageno if needed */
> if (ClogCtl->shared->RecentXminPageno < TransactionIdToPage(RecentXmin))
> ClogCtl->shared->RecentXminPageno =
> TransactionIdToPage(RecentXmin);
Thanks for looking at the patch.
The patch works fine. RecentXminPageno does move forwards as it is
supposed to and there are no uints anywhere in that calculation.
The pageno only moves forwards every 32,000 transactions, so I'm
guessing that your testing didn't go on for long enough to show it
working correctly.
As regards to effectiveness, you need to execute more than 1 million
transactions before the main clog cache fills, which might sound a
lot, but its approximately 1 minute of heavy transactions at the
highest rate Robert has published.
I've specifically designed the pgbench changes required to simulate
conditions of clog contention to help in the evaluation of this patch.
--
Simon Riggs http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services