Jeff Janes escribió: > On Thu, Feb 7, 2013 at 10:09 AM, Pavan Deolasee > <pavan.deola...@gmail.com> wrote: > > > > Right. I don't have the database handy at this moment, but earlier in > > the day I ran some queries against it and found that most of the > > duplicates which are not accessible via indexes have xmin very close > > to 2100345903. In fact, many of them are from a consecutive range. > > Does anyone have suggestions on how to hack the system to make it > fast-forward the current transaction id? It would certainly make > testing this kind of thing faster if I could make transaction id > increment by 100 each time a new one is generated. Then wrap-around > could be approached in minutes rather than hours.
I can reproduce the problem in a few minutes with the attached. -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index 64537d0..9513faf 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -159,16 +159,25 @@ GetNewTransactionId(bool isSubXact) * * Extend pg_subtrans too. */ - ExtendCLOG(xid); - ExtendSUBTRANS(xid); + { + int incr = pg_lrand48() & 0x7FF; - /* - * Now advance the nextXid counter. This must not happen until after we - * have successfully completed ExtendCLOG() --- if that routine fails, we - * want the next incoming transaction to try it again. We cannot assign - * more XIDs until there is CLOG space for them. - */ - TransactionIdAdvance(ShmemVariableCache->nextXid); + for (; incr > 0; incr--) + { + xid = ShmemVariableCache->nextXid; + + ExtendCLOG(xid); + ExtendSUBTRANS(xid); + + /* + * Now advance the nextXid counter. This must not happen until after we + * have successfully completed ExtendCLOG() --- if that routine fails, we + * want the next incoming transaction to try it again. We cannot assign + * more XIDs until there is CLOG space for them. + */ + TransactionIdAdvance(ShmemVariableCache->nextXid); + } + } /* * We must store the new XID into the shared ProcArray before releasing
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers