Re: Improve checking for pg_index.xmin

Tom Lane <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <[email protected]>
Heikki Linnakangas <[email protected]> writes:
> On 01/11/2019 01:50, Alexander Korotkov wrote:
>> This happens so, because we're checking that there is no broken HOT
>> chains after index creation by comparison pg_index.xmin and
>> TransactionXmin.   So, we check that pg_index.xmin is in the past for
>> current transaction in lossy way by comparison just xmins.  Attached
>> patch changes this check to XidInMVCCSnapshot().
>> With patch the issue is gone.  My doubt about this patch is that it
>> changes check with TransactionXmin to check with GetActiveSnapshot(),
>> which might be more recent.  However, query shouldn't be executer with
>> older snapshot than one it was planned with.

> Hmm. Maybe you could construct a case like that with a creative mix of 
> stable and volatile functions? Using GetOldestSnapshot() would be safer.

I really wonder if this is safe at all.

(1) Can we assume that the query will be executed with same-or-newer
snapshot as what was used by the planner?  There's no such constraint
in the plancache, I'm pretty sure.

(2) Is committed-ness of the index-creating transaction actually
sufficient to ensure that none of the broken HOT chains it saw are
a problem for the onlooker transaction?  This is, at best, really
un-obvious.  Some of those HOT chains could involve xacts that were
still not committed when the index build finished, I believe.

(3) What if the index was made with CREATE INDEX CONCURRENTLY ---
which xid is actually on the pg_index row, and how does that factor
into (1) and (2)?

On the whole I don't find the risk/reward tradeoff of this looking
promising.  Even if it works reliably, I think the situations where
it'll help a lot are a bit artificial.

			regards, tom lane
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.