如 5.4 节中所述,提交日志(clog) 存储着事务的状态。 当更新pg_database.datfrozenxid
时,PostgreSQL会尝试删除不必要的clog文件。 注意相应的clog页面也会被删除。
图6.7给出了一个例子。 如果clog文件0002
中包含最小的pg_database.datfrozenxid
,则可以删除旧文件(0000
和0001
),因为存储在这些文件中的所有事务在整个数据库集簇中已经被视为冻结了。
图6.7 删除不必要的clog文件和页面
pg_database.datfrozenxid
与clog文件下面展示了
pg_database.datfrozenxid
与clog文件的实际输出$ 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_clog/ # 10或更新的版本, "ls -la -h data/pg_xact/" 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