在备用模式下对PostgreSQL db运行查询时,我得到以下错误。导致错误的查询可以正常工作1个月,但当查询超过1个月时,就会出现错误。
ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed
有什么解决办法吗?谢谢
在备用模式下对PostgreSQL db运行查询时,我得到以下错误。导致错误的查询可以正常工作1个月,但当查询超过1个月时,就会出现错误。
ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed
有什么解决办法吗?谢谢
当前回答
正如这里所说的关于hot_standby_feedback = on:
它的缺点是备用电脑会让主电脑膨胀, 这可能也会让一些人感到惊讶
在这里:
max_standby_streaming_delay的设置是什么?我宁愿 默认为-1,而不是默认的hot_standby_feedback。那样的话 你在待机时做的事只会影响待机
所以我补充道
max_standby_streaming_delay = -1
和没有更多的pg_dump错误为我们,也不是主膨胀:)
对于AWS RDS实例,请查看http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html
其他回答
不需要触摸hot_standby_feedback。正如其他人所提到的,将其设置为开启会导致腹胀。想象一下在一个slave上打开一个事务,而不是关闭它。
相反,将max_standby_archive_delay和max_standby_streaming_delay设置为一个合理的值:
# /etc/postgresql/10/main/postgresql.conf on a slave
max_standby_archive_delay = 900s
max_standby_streaming_delay = 900s
这样,对于持续时间小于900秒的slave的查询将不会被取消。如果您的工作负载需要更长的查询,只需将这些选项设置为更高的值。
当一个长时间运行的查询正在运行时,热备从服务器上的表数据被修改。确保表数据不被修改的一个解决方案(PostgreSQL 9.1+)是暂停复制并在查询后恢复:
select pg_xlog_replay_pause(); -- suspend
select * from foo; -- your query
select pg_xlog_replay_resume(); --resume
也许现在回答这个问题已经太迟了,但我们在制作过程中也面临着同样的问题。 之前我们只有一个RDS,随着应用端用户数量的增加,我们决定为它添加Read Replica。Read副本在登台时工作正常,但一旦我们转移到生产时,我们开始得到相同的错误。
所以我们通过在Postgres属性中启用hot_standby_feedback属性来解决这个问题。 我们参考了以下链接
https://aws.amazon.com/blogs/database/best-practices-for-amazon-rds-postgresql-replication/
我希望它能有所帮助。
正如这里所说的关于hot_standby_feedback = on:
它的缺点是备用电脑会让主电脑膨胀, 这可能也会让一些人感到惊讶
在这里:
max_standby_streaming_delay的设置是什么?我宁愿 默认为-1,而不是默认的hot_standby_feedback。那样的话 你在待机时做的事只会影响待机
所以我补充道
max_standby_streaming_delay = -1
和没有更多的pg_dump错误为我们,也不是主膨胀:)
对于AWS RDS实例,请查看http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html
不需要在主服务器上启动空闲事务。在postgresql-9.1中 解决这个问题最直接的方法就是设置
hot_standby_feedback = on
这将使主服务器知道长时间运行的查询。从文档中可以看出:
第一个选项是设置参数hot_standby_feedback,这可以防止 从删除最近死亡的行中进行VACUUM,因此不会发生清理冲突。
为什么这不是默认的?该参数添加在初始值之后 实现,这是备用服务器影响主服务器的唯一方式。