首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能防止Postgres WAL归档的数据丢失?

是否有可能防止Postgres WAL归档的数据丢失?
EN

Database Administration用户
提问于 2019-08-16 11:33:26
回答 2查看 707关注 0票数 3

据我从文档中了解,当段文件达到一定大小或由于archive_timeout而存档时,将归档一个WAL段。

因此,如果数据库崩溃,来自当前活动的不完整WAL段的所有数据都将丢失(假设我们无法访问Postgres目录中的不完整段)。

我是否正确,如果正确,是否有办法避免这种数据丢失?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-08-16 12:12:11

你是对的。

避免这种情况的方法是使用pg_receivewal,它将WAL信息从数据库服务器中流出来,并将其立即保存在WAL段中。

默认情况下,这是异步的,因此您可能会在崩溃时损失一些时间。您需要避免这种情况,您必须使用与pg_receivewal同步的复制,但请注意

  1. 这使得DML语句更慢,因为COMMIT在收到pg_receivewal的回复后才能成功。
  2. 您不应该设置synchronous_commit = remote_apply,因为pg_receivewal从不应用更改,它只是将它们保存到WAL文件中。
票数 2
EN

Database Administration用户

发布于 2019-08-16 12:05:21

PostgreSQL使用写前日志(WAL)作为事务日志记录的方法。WAL的核心概念是,对数据文件(表和索引所在的地方)的更改必须在这些更改被记录之后才写入,也就是说,当描述这些更改的日志记录被刷新到永久存储时。如果遵循此过程,则无需在每次事务提交时将数据页刷新到磁盘,因为我们知道,如果发生崩溃,我们将能够使用日志恢复数据库:未应用于数据页的任何更改都可以从日志记录中重新执行。(这是前滚恢复,也称为重做。)这是从下面的链接:

https://wiki.postgresql.org/wiki/PostgreSQL_为_甲骨文_DBA

但是,从内存到磁盘的任何内容都将在重做+数据库中启动,只会保证提交的事务。任何仅在内存中的东西都是不可提交和不可恢复的.确实存在一些HA机制,用于将事务保存在内存中,而不是PostgreSQL。

票数 -1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/245513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档