Hi,
On 2019-05-18 15:48:47 -0400, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > Not quite - that was about the DML callbacks, this is about the scan itself. And while we have a snapshot
allocated,the analyze version of the beginscan intentionally doesn't take a snapshot.
>
> Uh, what? That's a *huge* regression. See, eg, 7170268ef. We
> really want ANALYZE to act as though it's reading a normal MVCC
> snapshot.
Hm? That's not new at all? In 11 we just do:
switch (HeapTupleSatisfiesVacuum(&targtuple,
OldestXmin,
targbuffer))
I.e. unrelated to the tableam changes there's no mvcc snapshot in for
visibility determinations. And that's not changed, heap's implementation
still uses HTSV. We do *hold* a snapshot, but that's all outside of
analyze.c afaik.
I've complained before that we're using a snapshot for analyze's
sampling scan in a lot of cases where it's not necessary, and that's a
very significant problem in production (where autvacuum doesn't cause
slowdowns, but autoanalyze does quite substantially). But I'd not
change it just as an aside.
Greetings,
Andres Freund