Em qua., 25 de mai. de 2022 às 00:56, Andres Freund <and...@anarazel.de> escreveu:
> Hi, > > On 2022-05-24 13:23:43 -0300, Ranier Vilela wrote: > > It certainly helps, but I trust that's not the only reason, in all the > > tests I did, there was an improvement in performance, even before using > > this feature. > > If you look closely at GetSnapShotData() you will see that > > GetSnapshotDataReuse is called for all snapshots, even the new ones, > which > > is unnecessary. > > That only happens a handful of times as snapshots are persistently > allocated. Yes, but now this does not happen with new snapshots. Doing an extra GetSnapshotDataReuse() in those cases doesn't matter > for performance. If anything this increases the number of jumps for the > common > case. > IMHO with GetSnapShotData(), any gain makes a difference. > > It'd be a huge win to avoid needing ProcArrayLock when reusing a snapshot, > but > it's not at all easy to guarantee that it's correct / see how to make it > correct. I'm fairly sure it can be made correct, but ... > I believe it's worth the effort to make sure everything goes well and use this feature. > > Another example NormalTransactionIdPrecedes is more expensive than > testing > > statusFlags. > > That may be true when you count instructions, but isn't at all true when > you > take into account that the cachelines containing status flags are hotly > contended. > > Also, the likelihood of filtering out a proc due to > NormalTransactionIdPrecedes(xid, xmax) is *vastly* higher than the due to > the > statusFlags check. There may be a lot of procs failing that test, but > typically there will be far fewer backends in vacuum or logical decoding. > I believe that keeping the instructions in the cache together works better than having the status flags test in the middle. But I will test this to be sure. regards, Ranier Vilela