6.4. Removing Unnecessary Clog Files
The clog, described in Section 5.4, stores transaction states. When pg_database.datfrozenxid is updated, PostgreSQL attempts to remove unnecessary clog files. Note that corresponding clog pages are also removed.
Figure 6.7 shows an example. If the minimum pg_database.datfrozenxid is contained in the clog file ‘0002’, the older files (‘0000’ and ‘0001’) can be removed because all transactions stored in those files can be treated as frozen txids in the whole database cluster.
pg_database.datfrozenxid and the clog file
The following shows the actual output of pg_database.datfrozenxid and the clog files:
$ psql testdb -c "SELECT datname, datfrozenxid FROM pg_database"
datname | datfrozenxid
-----------+--------------
template1 | 7308883
template0 | 7556347
postgres | 7339732
testdb | 7506298
(4 rows)
$ ls -la -h data/pg_xact/ # In versions 9.6 or earlier, "ls -la -h data/pg_clog/"
total 316K
drwx------ 2 postgres postgres 28 Dec 29 17:15 .
drwx------ 20 postgres postgres 4.0K Dec 29 17:13 ..
-rw------- 1 postgres postgres 256K Dec 29 17:15 0006
-rw------- 1 postgres postgres 56K Dec 29 17:15 0007