Re: CLOG contention, part 2
От | Jeff Janes |
---|---|
Тема | Re: CLOG contention, part 2 |
Дата | |
Msg-id | CAMkU=1zExy_Y55pQETp4YGeN8=eQwDow3Ar9Nfr4nPt+d17cpQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: CLOG contention, part 2 (Jeff Janes <jeff.janes@gmail.com>) |
Список | pgsql-hackers |
On Sun, Jan 29, 2012 at 1:41 PM, Jeff Janes <jeff.janes@gmail.com> wrote: > On Sun, Jan 29, 2012 at 12:18 PM, Simon Riggs <simon@2ndquadrant.com> wrote: >> 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. > > Maybe it is system dependent. Or, are you running this patch on top > of some other uncommitted patch (other than the pgbench one)? > > RecentXmin is a TransactionID, which is a uint32. > I think the TransactionIdToPage macro preserves that. > > If I cast to a int, then I see advancement: > > if (ClogCtl->shared->RecentXminPageno < (int) TransactionIdToPage(RecentXmin)) And to clarify, if I don't do the cast, I don't see advancement, using this code: elog(LOG, "JJJ RecentXminPageno %d, %d", ClogCtl->shared->RecentXminPageno , TransactionIdToPage(RecentXmin)); if (ClogCtl->shared->RecentXminPageno< TransactionIdToPage(RecentXmin)) ClogCtl->shared->RecentXminPageno = TransactionIdToPage(RecentXmin); Then using your pgbench -I -s 100 -c 8 -j8, I get tons of log entries like: LOG: JJJ RecentXminPageno -1, 149 STATEMENT: INSERT INTO pgbench_accounts (aid, bid, abalance) VALUES (nextval('pgbench_accounts_load_seq'), 1 + (lastval()/(100000)), 0); Cheers, Jeff
В списке pgsql-hackers по дате отправления: