From: | "Mike Klaas" <mike(at)superhuman(dot)com> |
---|---|
To: | "Thomas Munro" <thomas(dot)munro(at)gmail(dot)com> |
Cc: | "pgsql-general" <pgsql-general(at)postgresql(dot)org>, "Engineering-archive" <engineering-archive(at)superhuman(dot)com> |
Subject: | Re: Help understanding SIReadLock growing without bound on completed transaction |
Date: | 2020-05-26 15:42:41 |
Message-ID: | kao2slpo.7752e94b-76a3-4d7c-a903-f43805293299@we.are.superhuman.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Fri, May 22, 2020 at 3:15 PM, Thomas Munro < thomas(dot)munro(at)gmail(dot)com > wrote:
>
>
>
> Predicate locks are released by ClearOldPredicateLocks(), which releases
> SERIALIZABLEXACTs once they are no longer interesting. It has a
> conservative idea of what is no longer interesting: it waits until the
> lowest xmin across active serializable snapshots is >= the transaction's
> finishedBefore xid, which was the system's next xid (an xid that hasn't
> been used yet*) at the time the SERIALIZABLEXACT committed. One
> implication of this scheme is that SERIALIZABLEXACTs are cleaned up in
> commit order. If you somehow got into a state where a few of them were
> being kept around for a long time, but others committed later were being
> cleaned up (which I suppose must be the case or your system would be
> complaining about running out of SERIALIZABLEXACTs), that might imply that
> there is a rare leak somewhere in this scheme. In the past I have wondered
> if there might be a problem with wraparound in the xid tracking for
> finished transactions, but I haven't worked out the details (transaction
> ID wraparound is both figuratively and literally the Ground Hog Day of
> PostgreSQL bug surfaces).
>
>
>
>
Thanks for the detailed reply, Thomas. Is SERIALIZABLEXACT transaction ID wraparound the same as global xid wraparound? The max transaction age in the db is ~197M [1] so I don't think we've gotten close to global wraparound lately.
Would it be helpful to cross-post this thread to pgsql-bugs or further investigate on my end
-Mike
[1] superhuman@ production => select datname, datfrozenxid, age(datfrozenxid) from pg_catalog.pg_database;
datname | datfrozenxid | age
---------------+--------------+-----------
cloudsqladmin | 4173950091 | 169089900
template0 | 4266855294 | 76184697
postgres | 4173951306 | 169088685
template1 | 4266855860 | 76184131
superhuman | 4145766807 | 197273184
From | Date | Subject | |
---|---|---|---|
Next Message | Mike Klaas | 2020-05-26 16:14:47 | Re: Help understanding SIReadLock growing without bound on completed transaction |
Previous Message | Stephen Frost | 2020-05-26 14:20:30 | Re: pg_basebackup + incremental base backups |