我试图找到一个解释有关的实际数量的文件被存储在我的pg_wal目录。
我在一个有很多更新、插入和删除的大型数据库上使用postgres v13,所以我希望pg_wal目录中有相当多的文件。
根据我到目前为止所了解的,pg_wal目录上的文件数量取决于checkpoint_timeout
和max_wal_size
的值。
我在我的环境中遇到了一个奇怪的行为,我经常看到7 pg_wal段文件。这意味着我经常有7*16MB = 112MB的文件。
然后我查看了文件的时间戳,以找出最早和最旧的时间戳,下面的示例显示它们的时间戳超过5分钟。最早的是19:54,最新的是20:05
-rw------- 1 postgres postgres 16777216 Nov 10 20:04 000000010000E76A00000097
-rw------- 1 postgres postgres 16777216 Nov 10 20:05 000000010000E76A00000098
-rw------- 1 postgres postgres 16777216 Nov 10 20:10 000000010000E76A00000099
-rw------- 1 postgres postgres 16777216 Nov 10 19:54 000000010000E76A0000009A
-rw------- 1 postgres postgres 16777216 Nov 10 19:56 000000010000E76A0000009B
-rw------- 1 postgres postgres 16777216 Nov 10 20:02 000000010000E76A0000009C
-rw------- 1 postgres postgres 16777216 Nov 10 20:03 000000010000E76A0000009D
-rw------- 1 postgres postgres 16777216 Nov 10 20:01 000000010000E76A0000009E
字符串
试图弄清楚为什么我总是有7个pg_wal段文件。
checkpoint_timeout = 5min
max_wal_size = 2GB
型
我会算出来,在那个特定的时间有112MB的数据被更改,因为有多个脚本运行在不同的时刻,文件的数量从来没有改变到更多或更少的东西。
我正在研究如何创建一个副本,并在这些价值观的基础上,并试图了解更多的东西。
试图确定问题是否只存在于一天中的特定时间,但事实并非如此。实际上,无论我检查pg_wal目录,我都会看到7个文件。
变化的是最旧和最新文件之间的时间。有时可能是10分钟,有时可能是30分钟或更长时间(但这取决于在DB中写入或更改的实际数据)
1条答案
按热度按时间rn0zuynd1#
如果您计划构建备用服务器,则不必担心
pg_wal
中的WAL段数量。您所要做的就是配置PostgreSQL,以便它为备用服务器保留足够的WAL。有三种方法可以做到这一点:1.在主服务器上设置
wal_keep_size
,使其始终保留一定量的旧WAL。1.设置
archive_mode = on
并配置archive_command
,以便PostgreSQL创建WAL归档。然后在备用服务器上设置restore_command
,以便它可以从归档中恢复。您可以在备用服务器上使用archive_cleanup_command
删除不再需要的归档WAL段。1.使用使主服务器保留适量WAL的复制插槽。
我建议选择2或3。