案例实现:我们目前正在使用热备模式来同步从一个主服务器到一个服务器的任何更改.从属角色是一个报告数据库服务器,其查询不断并同时运行(有些以ms为单位,有些以秒为单位,
一些在几分钟内.)在奴隶上运行没有活动查询的差距是非常罕见的.
我们调整了这两个参数,以便在热备份上进行长时间查询:
max_standby_archive_delay = -1 # max delay before canceling queries max_standby_streaming_delay = -1 # max delay before canceling queries
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个数据库
数据库.
任何帮助将不胜感激.
谢谢!
http://www.postgresql.org/message-id/D274E3C1.1113E8%awilliams@dresourcesgroup.com
http://www.postgresql.org/docs/9.1/static/hot-standby.html
摘抄:
Remedial possibilities exist if the number of standby-query cancellations is found to be unacceptable. The first option is to set the parameter
hot_standby_Feedback
,which preventsVACUUM
from removing recently-dead rows and so cleanup conflicts do not occur. If you do this,you should note that this will delay cleanup of dead rows on the primary,which may result in undesirable table bloat. However,the cleanup situation will be no worse than if the standby queries were running directly on the primary server,and you are still getting the benefit of off-loading execution onto the standby.max_standby_archive_delay
must be kept large in this case,because delayed WAL files might already contain entries that conflict with the desired standby queries.
方案实施:
以下是您应该在备用服务器上配置postgresql.conf的内容:
max_standby_archive_delay = -1 max_standby_streaming_delay = -1 hot_standby_Feedback = on