DB Internals AtlasPostgreSQL 18.6 Home About

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.

See it in context

SLRU caches Commit log, hint bits and subtransactions

Related parameters

track_commit_timestamp transaction_buffers shared_buffers

All Resource Usage parameters