From: | Peter Geoghegan <pg(at)bowt(dot)ie> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | Dimos Stamatakis <dimos(dot)stamatakis(at)servicenow(dot)com>, "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Fix for visibility check on 14.5 fails on tpcc with high concurrency |
Date: | 2022-11-23 16:14:08 |
Message-ID: | CAH2-Wzm7UtYC5USErGztDzOUAS8kK4HatWPu56TfzEB-SY_rOg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Nov 23, 2022 at 2:54 AM Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> Something like the attached. It would result in output like this:
> WARNING: new multixact has more than one updating member: 0 2[17378 (keysh), 17381 (nokeyupd)]
>
> Then it should be possible to trace (in pg_waldump output) the
> operations of each of the transactions that have any status in the
> multixact that includes some form of "upd".
That seems very useful.
Separately, I wonder if it would make sense to add additional
defensive checks to FreezeMultiXactId() for this. There is an
assertion that should catch the presence of multiple updaters in a
single Multi when it looks like we have to generate a new Multi to
carry the XID members forward (typically something we only need to do
during a VACUUM FREEZE). We could at least make that
"Assert(!TransactionIdIsValid(update_xid));" line into a defensive
"can't happen" ereport(). It couldn't hurt, at least -- we already
have a similar relfrozenxid check nearby, added after the "freeze the
dead" bug was fixed.
--
Peter Geoghegan
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2022-11-23 16:14:51 | Re: Prefetch the next tuple's memory during seqscans |
Previous Message | Bruce Momjian | 2022-11-23 16:03:22 | Re: Prefetch the next tuple's memory during seqscans |