Parameter · Resource Usage / Memory
commit_timestamp_buffers
Sets the size of the dedicated buffer pool used for the commit timestamp cache. 0 means use a fraction of "shared_buffers".
- Default:
0 - Type: integer (8kB)
- Range: 0 … 1GB
- Applies: Restart required
In plain words
When track_commit_timestamp is on, PostgreSQL records when each transaction committed, in files under pg_commit_ts. This setting is how many 8 kB pages of that data are cached in shared memory. If the feature is off, the cache is hardly used.
For DBAs and operators
New in PostgreSQL 17 (earlier versions had a fixed size). The default 0 means shared_buffers / 512, at least 16 and at most 1024 buffers (8 MB); with 128 MB shared_buffers that is 32. Values must be a multiple of 16 (the SLRU bank size): DETAIL: "commit_timestamp_buffers" must be a multiple of 16.
Matters when track_commit_timestamp = on and something reads timestamps a lot: pg_xact_commit_timestamp(), logical replication conflict detection/resolution (PostgreSQL 18 logs conflicts using commit timestamps), or tools like BDR-style replication. Check pg_stat_slru where name = 'commit_timestamp': a high blks_read relative to blks_hit means misses. Wait events CommitTsSLRU (LWLock) / CommitTsBuffer point the same way.
How to change it
Change in postgresql.conf or ALTER SYSTEM, then restart the server.