我们运行着 PostgreSQL 服务器,上面有几个数据库,总共约 6.6 GiB。每天增长约 10 Mb。
我已经使用一个非常基本的设置激活了 WAL 归档:
wal_level = archive
archive_mode = on
archive_command = 'rsync -a %p barman@backupserver:/var/lib/barman/company/incoming/%f'
然而我发现 WAL 的大小增长得非常快。
20160921T210006 - Wed Sep 21 21:15:22 2016 - Size: 6.6 GiB - WAL Size: 14.5 GiB
20160920T115237 - Tue Sep 20 12:07:44 2016 - Size: 6.6 GiB - WAL Size: 7.4 GiB
超过我们数据库总大小的两倍。如此多的更新没有或不应该进行。问题可能出在哪里?我们如何找到原因?
答案1
对于频繁更新的数据库来说,这是意料之中的事。每次更新都会为表和每个表索引生成一个日志条目(如果任何索引列被更新的话)(如果它无法执行热更新)。
您可以使用以下方法限制生成的 WAL 的数量wal_compression配置选项(自 PostgreSQL 9.5 起可用)。您还可以使用外部压缩工具进一步(或改为)减少 WAL 的数量,例如:
archive_command = 'xz -1 --force %p && rsync -a %p.xz barman@backupserver:/var/lib/barman/company/incoming/%f.xz'
您需要一个restore_command
能起到相反作用的对应物。