Re: Add 64-bit XIDs into PostgreSQL 15
Pavel Borisov <pashkin.elfe@gmail.com>
From: Pavel Borisov <pashkin.elfe@gmail.com>
To: Aleksander Alekseev <aleksander@timescale.com>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-01-28T14:43:06Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add SLRU tests for 64-bit page case
- a60b8a58f435 17.0 landed
-
Make use FullTransactionId in 2PC filenames
- 5a1dfde8334b 17.0 landed
-
Use larger segment file names for pg_notify
- 2cdf131c46e6 17.0 landed
-
Index SLRUs by 64-bit integers rather than by 32-bit integers
- 4ed8f0913bfd 17.0 landed
> > Did you consider using 4 bytes for pd_xid_base and another 4 bytes for > (pd_xid_base/pd_multi_base)? This would allow calculating XMIN/XMAX > as: > > XMIN = (t_min_extra_bits << 32) | t_xmin > XMAX = (t_max_extra_bits << 32) | t_xmax > > ... and save 8 extra bytes in the pd_special area. Or maybe I'm > missing some context here? > Hi, Alexander! In current design it is not possible, as pd_xid_base is roughly just a minimum 64-xid of all tuples that may fit this page. So we do not make any extra guess that it should be in multiples of 2^32. If we make pd_xid_base in multiples of 2^32 then after current XID crosses the border of 2^32 then pages that contains tuples with XMIN/XMAX before this point are not suitable for tuple inserts anymore. In effect we will then have "sets" of the pages for each 2^32 "epoch" with freed space that can not be used anymore. I think it's too big a loss for gain of just 8 bytes per page. Thank you for your dive into this matter! -- Best regards, Pavel Borisov Postgres Professional: http://postgrespro.com <http://www.postgrespro.com>