我们正在使用pgbackrest将数据库备份到Amazon。我们每周备份一次,每隔一天进行一次增量备份。我们数据库的大小大约是1TB,完整备份大约是600 an,增量备份也是大约400 an!
我们发现,即使是数据库上的read (纯select语句)也会导致底层数据文件(in /usr/local/pgsql/ data /base/xxxxxx)发生变化。这导致了大量的增量备份,也导致了亚马逊S3上非常大的存储(成本)。
通常,低索引名(例如391089.1)的文件在读取访问时会发生变化。
在更新时,我们看到一个或多个文件中的更改-索引可能与表中行的年龄相关。
更多的事实:
我们在多台服务器上看到了这种现象。
有人能解释一下,为什么postgresql会在纯读取访问上更改数据文件?我们在纯数据库上进行测试,而没有任何其他资源访问数据库。
发布于 2021-02-16 16:34:24
这很正常。我可以马上想到的一些案例是:
SELECT或其他设置提示位的SQL语句对于访问数据的后续语句来说,这是一个快捷方式,因此它们不再需要查询提交日志。
SELECT ... FOR UPDATE编写行锁这些是来自UPDATE.或DELETE的剩菜
如果事务ID计数器环绕在.周围,这对于防止数据损坏是必要的。
防止PostgreSQL在将来修改表的唯一方法是:
上执行INSERT、UPDATE或DELETE
VACUUM (FREEZE)并确保没有并发的VACUUM (FREEZE)。https://stackoverflow.com/questions/66227766
复制相似问题