Hi! I've been trying to introduce 64-bit transaction identifications to Postgres for quite a while [0]. All this implies, of course, an enormous amount of change that will have to take place in various modules. Consider this, the patch set become too big to be committed “at once”.
The obvious solutions was to try to split the patch set into smaller ones. But here it comes a new challenge, not every one of these parts, make Postgres better at the moment. Actually, even switching to a FullTransactionId in PGPROC will have disadvantage in increasing of WAL size [1]. In fact, I believe, we're dealing with the chicken and the egg problem here. Not able to commit full patch set since it is too big to handle and not able to commit parts of it, since they make sense all together and do not help improve Postgres at the moment. But it's not that bad. Since the commit 4ed8f0913bfdb5f, added in [3], we are capable to use 64 bits to indexing SLRUs. PROPOSAL Make multixact offsets 64 bit. RATIONALE It is not very difficult to overflow 32-bit mxidoff. Since, it is created for every unique combination of the transaction for each tuple, including XIDs and respective flags. And when a transaction is added to a specific multixact, it is rewritten with a new offset. In other words, it is possible to overflow the offsets of multixacts without overflowing the multixacts themselves and/or ordinary transactions. I believe, there was something about in the hackers mail lists, but I could not find links now. PFA, patch. Here is a WIP version. Upgrade machinery should be added later. As always, any opinions on a subject a very welcome! [0] https://www.postgresql.org/message-id/flat/CACG%3DezZe1NQSCnfHOr78AtAZxJZeCvxrts0ygrxYwe%3DpyyjVWA%40mail.gmail.com [1] https://www.postgresql.org/message-id/flat/CACG%3DezY7msw%2Bjip%3Drtfvnfz051dRqz4s-diuO46v3rAoAE0T0g%40mail.gmail.com [3] https://postgr.es/m/CAJ7c6TPDOYBYrnCAeyndkBktO0WG2xSdYduTF0nxq%2BvfkmTF5Q%40mail.gmail.com -- Best regards, Maxim Orlov.
0001-WIP-mxidoff-to-64bit.patch
Description: Binary data