On Thu, May 4, 2017 at 9:42 PM, Dmitriy Sarafannikov <dsarafanni...@yandex.ru> wrote: > >> Maybe we need another type of snapshot that would accept any >> non-vacuumable tuple. I really don't want SnapshotAny semantics here, >> but a tuple that was live more recently than the xmin horizon seems >> like it's acceptable enough. HeapTupleSatisfiesVacuum already >> implements the right behavior, but we don't have a Snapshot-style >> interface for it. > > > I have tried to implement this new type of snapshot that accepts any > non-vacuumable tuples. > We have tried this patch in our load environment. And it has smoothed out > and reduced magnitude of the cpu usage peaks. > But this snapshot does not solve the problem completely. > > Patch is attached.
1. +#define InitNonVacuumableSnapshot(snapshotdata) \ + do { \ + (snapshotdata).satisfies = HeapTupleSatisfiesNonVacuumable; \ + (snapshotdata).xmin = RecentGlobalDataXmin; \ + } while(0) + Can you explain and add comments why you think RecentGlobalDataXmin is the right to use it here? As of now, it seems to be only used for pruning non-catalog tables. 2. +bool +HeapTupleSatisfiesNonVacuumable(HeapTuple htup, Snapshot snapshot, + Buffer buffer) +{ + return HeapTupleSatisfiesVacuum(htup, snapshot->xmin, buffer) + != HEAPTUPLE_DEAD; +} + Add comments on top of this function and for the sake of consistency update the file header as well (Summary of visibility functions:) -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers