Re: snapshot too old issues, first around wraparound and then more. - Mailing list pgsql-hackers
From | Andres Freund |
---|---|
Subject | Re: snapshot too old issues, first around wraparound and then more. |
Date | |
Msg-id | 20200401194259.muanfu4m2macoi2u@alap3.anarazel.de Whole thread Raw |
In response to | Re: snapshot too old issues, first around wraparound and then more. (Kevin Grittner <kgrittn@gmail.com>) |
Responses |
Re: snapshot too old issues, first around wraparound and then more.
Re: snapshot too old issues, first around wraparound and then more. |
List | pgsql-hackers |
Hi, Nice to have you back for a bit! Even if the circumstances aren't great... It's very understandable that the lists are past your limits, I barely keep up these days. Without any health issues. On 2020-04-01 14:10:09 -0500, Kevin Grittner wrote: > Perhaps the lack of evidence for usage in the archives indicates a low > frequency of real-world failures due to the feature, rather than lack of > use? I'm not doubting that Andres found real issues that should be fixed, > but perhaps not very many people who are using the feature have more than > two billion transactions within the time threshold, and perhaps the other > problems are not as big as the problems solved by use of the feature -- at > least in some cases. > To save readers who have not yet done the math some effort, at the 20 > minute threshold used by the initial user, they would need to have a > sustained rate of consumption of transaction IDs of over 66 million per > second to experience wraparound problems, and at the longest threshold I > have seen it would need to exceed an average of 461,893 TPS for three days > solid to hit wraparound. Those aren't impossible rates to hit, but in > practice it might not be a frequent occurrence yet on modern hardware with > some real-world applications. Hopefully we can find a way to fix this > before those rates become common. The wraparound issue on their own wouldn't be that bad - when I found it I did play around with a few ideas for how to fix it. The most practical would probably be to have MaintainOldSnapshotTimeMapping() scan all buckets when a new oldSnapshotControl->oldest_xid is older than RecentGlobalXmin. There's no benefit in the contents of those buckets anyway, since we know that we can freeze those independent of old_snapshot_threshold. The thing that makes me really worried is that the contents of the time mapping seem very wrong. I've reproduced query results in a REPEATABLE READ transaction changing (pruned without triggering an error). And I've reproduced rows not getting removed for much longer than than they should, according to old_snapshot_threshold. I suspect one reason for users not noticing either is that a) it's plausible that users of the feature would mostly have long-running queries/transactions querying immutable or insert only data. Those would not notice that, on other tables, rows are getting removed, where access would not trigger the required error. b) I observe long-ish phases were no cleanup is happening (due to oldSnapshotControl->head_timestamp getting updated more often than correct). But if old_snapshot_threshold is small enough in relation to the time the generated bloat becomes problematic, there will still be occasions to actually perform cleanup. Greetings, Andres Freund
pgsql-hackers by date: