Hi,

On 2019-05-18 15:48:47 -0400, Tom Lane wrote:
> Andres Freund <and...@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


Reply via email to