dav*_*100 7 postgresql postgresql-9.2
我正在寻找一种在 redhat 6 上运行 9.2 postgres 数据库而不生成任何 WAL 文件的方法。
我们有一个日终批处理,它生成大量的 WAL 文件(并且已经填满了磁盘几次)。我们还在一天结束的过程开始之前和结束时进行 pg_dump 备份。我们很高兴,如果在批处理过程中出现问题来恢复 pg_dump 前的备份。
当我将 wal_level 设置为最小时,由于发生的数据库更新类型,我们仍然会收到大量 WAL 文件。那么是否有可能没有 WAL 文件(基本上是 wal_level=none)?
谢谢戴夫
Cra*_*ger 11
简短版本:没有。PostgreSQL 不支持不生成任何 WAL,因为对pg_catalog
模式中系统目录表的更改总是被记录下来。除了 xlog 之外,还有事务 ID 日志记录 ( pg_clog
)、multixact 跟踪数据 ( pg_multixact
) 等,但它们往往非常小。
正如丹尼尔所说,您可以通过以下方式以最少的WAL 生成运行:
wal_level = minimal
UNLOGGED
或TEMPORARY
表在这种情况下,您还需要设置fsync = off
,full_page_writes = off
和synchronous_commit = off
,因为您不需要持久性和崩溃恢复。
当然,如果出现任何问题(如断电、意外重启、数据库服务器崩溃pg_ctl -m immediate stop
等),您的数据将完全无法恢复,但这似乎正是您想要的。
对于大多数应用程序,使用此配置创建和旋转 WAL 的速率可以忽略不计。
如果您不介意initdb
在任何重新启动(即使是干净的)后重新启动,您可以pg_xlog
使用 tempfs,但我怀疑当 Pg 只生成一点点 WAL 时是否值得麻烦。
您还应该检查并确保您没有archive_mode = on
启用WAL 归档 ( ),这wal_keep_segments
未设置。这两者仅在您进行基于 WAL 的备份或复制时才有用。如果你不这样做,那么 WAL 不应该累积,它应该被迅速回收。也许你的检查点设置得太少了,以至于你的磁盘用完了?检查checkpoint_segments
参数是否真的很高。
我认为你在这里试图解决错误的问题。问题不是阻止 PostgreSQL 生成 WAL,而是弄清楚为什么它会堆积在您的批处理作业中。
另请参阅:优化 PostgreSQL 以进行快速测试。
归档时间: |
|
查看次数: |
4134 次 |
最近记录: |