首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PostgreSQL错误:由于与恢复冲突,正在取消语句

PostgreSQL错误:由于与恢复冲突,正在取消语句
EN

Stack Overflow用户
提问于 2013-01-30 05:15:23
回答 3查看 169.7K关注 0票数 198

在待机模式下对PostgreSQL数据库运行查询时,我收到以下错误。导致错误的查询在1个月内工作正常,但当查询超过1个月时,会出现错误。

代码语言:javascript
复制
ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed

对如何解决有什么建议吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-30 07:51:55

在热备份服务器上运行查询有点棘手-它可能会失败,因为在查询过程中,可能会在主服务器上更新或删除一些需要的行。因为主节点不知道查询是在次节点上启动的,所以它认为可以清理(真空)其行的旧版本。然后,次要必须重放此清理,并必须强制取消所有可以使用这些行的查询。

更长的查询将更频繁地被取消。

您可以通过在主服务器上启动一个可重复的读事务来解决此问题,该事务将执行一个虚拟查询,然后在次要服务器上运行真正的查询时处于空闲状态。它的存在将阻止对主服务器上的旧行版本进行清理。

有关此主题和其他解决方法的更多信息,请参阅文档中的Hot Standby — Handling Query Conflicts部分。

票数 122
EN

Stack Overflow用户

发布于 2017-12-06 03:33:42

不需要碰hot_standby_feedback。正如其他人所提到的,将其设置为on可能会使master膨胀。想象一下,在从服务器上打开事务,而不是关闭它。

相反,将max_standby_archive_delaymax_standby_streaming_delay设置为某个合理的值:

代码语言:javascript
复制
# /etc/postgresql/10/main/postgresql.conf on a slave
max_standby_archive_delay = 900s
max_standby_streaming_delay = 900s

这样持续时间小于900秒的slaves查询不会被取消。如果您的工作负载需要更长的查询,只需将这些选项设置为更高的值。

票数 144
EN

Stack Overflow用户

发布于 2017-10-05 16:56:02

热备从机上的表数据在长时间运行查询时被修改。确保表数据不被修改的一种解决方案(PostgreSQL 9.1+)是暂停复制,并在查询后恢复:

代码语言:javascript
复制
select pg_xlog_replay_pause(); -- suspend
select * from foo; -- your query
select pg_xlog_replay_resume(); --resume
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14592436

复制
相关文章

相似问题

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