小编use*_*516的帖子

Postgres热备和长期查询奴隶

问题:在热备模式下,在从属设备上应用WAL更新(从属角色是报告数据库服务器)时,是否可以运行长时间运行的查询(30秒+)?它现在的工作方式是,要么设置下面的参数来杀死长时间运行的查询,以便可以应用WAL更新,或者无限期地延迟WAL更新,直到没有运行查询来应用它们.我们可以同时拥有吗?长时间运行的查询和WAL更新同时应用?

案例实现:我们目前正在使用热备模式来同步从一个主服务器到一个服务器的任何更改.slave角色是一个报告数据库服务器,其查询不断地并发地运行(一些以ms为单位,一些以秒为单位,一些以分钟为单位.)在从站上运行没有活动查询的间隙是非常罕见的.

我们调整了这两个参数,以便在热备用上进行长时间查询:

max_standby_archive_delay = -1  # max delay before canceling queries
max_standby_streaming_delay = -1  # max delay before canceling queries
Run Code Online (Sandbox Code Playgroud)

在postgres邮件列表中查看类似于我们的存档邮件问题:

http://www.postgresql.org/message-id/AANLkTinLg+bpzcjzdndsnGGNFC=D1OsVh+hKb85A-s=n@mail.gmail.com

我理解在查询运行时阻止WAL更新应用于从属的概念.但是,我认为与使用MVCC,从属节点上的活动查询的(长期运行30秒+)可以运行从一个版本/快照读书,一边在施加WAL更新,因此后续的查询将得到WAL更新时WAL事务已提交.我还没有完全消化PostgreSQL中使用的MVCC模型[ https://devcenter.heroku.com/articles/postgresql-concurrency],所以这只是我的假设 - 即使表在一个表中被删除/截断WAL更新,当前运行的查询应该仍然有效,因为它正在使用它查询的表的版本/快照?

简介:无论如何(即使有第三方扩展)我们可以从主服务器同步从服务器并将主服务器的更新立即应用于从服务器,同时让任何执行时间的查询继续运行直到他们在备用服务器上完成/奴隶?如果Hot Standby无法做到这一点,你会为这种情况推荐什么?我们的情况是,我们正在不断地运行postgres并同时运行(一些以ms为单位,一些以秒为单位,一些以分钟为单位),几乎没有时间来应用WAL更新.我们使用过Bucardo,但在这种情况下这不是一个好的选择,因为我们需要同步200多个表,包括视图以及除主数据库之外的40多个其他数据库.

任何帮助将不胜感激.

谢谢!

postgresql replication database-replication

12
推荐指数
2
解决办法
8459
查看次数