postgresql因在从库备份时间长而失败

文章目录

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 Red Hat Enterprise Linux 8

版本:10.4,11,12,13,14

症状

在standby从库用pg_dump因数据库比较大备份时间久,抛出错误备份失败。报错信息如下

复制代码
postgres@vm112 ~]$ pg_dump -dpostgres -f a.dmp
pg_dump: error: Dumping the contents of table "t1" failed: PQgetResult() failed.
pg_dump: error: Error message from server: ERROR:  canceling statement due to conflict with recovery
DETAIL:  User query might have needed to see row versions that must be removed.

问题原因

standby从库有个wal replay进程在进行wal回放, 如果回放过程中有查询会话和回放的内容发生了冲突, 那么wal回放会进行等待,等待的时间不会大于参数max_standby_streaming_delay的设定。当等待超过这个时间时, wal replay会cancel与之有冲突的所有查询会话, 然后开始恢复。

解决方案

1、查询max_standby_streaming_delay设置

sql 复制代码
postgres=# show max_standby_streaming_delay ;
 max_standby_streaming_delay 
-----------------------------
 3min
(1 row)

2、调大max_standby_streaming_delay的设置

sql 复制代码
postgres=#  alter system set max_standby_streaming_delay='10min';
ALTER SYSTEM
postgres=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)
postgres=# show max_standby_streaming_delay ;
 max_standby_streaming_delay 
-----------------------------
 10min
(1 row)

3、重新进行备份,备份成功

sql 复制代码
[postgres@vm112 ~]$  pg_dump -dpostgres -f a.dmp;
[postgres@vm112 ~]$  

报错编码

pg_dump: error: Error message from server: ERROR: canceling statement due to conflict with recovery

相关推荐
Juicedata12 分钟前
腾讯云 x JuiceFS:基于 FoundationDB 的企业级统一存储实践
数据库·人工智能·科技·云计算·腾讯云
小罗水23 分钟前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
有续技术25 分钟前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.32 分钟前
LAMP架构2
linux·运维·网络·架构·负载均衡
SelectDB技术团队33 分钟前
当 PostgreSQL 面临性能瓶颈:80TB 电商业务迁移至 Apache Doris 的实践思考
数据库·postgresql·apache
千河殇 多想和她34 分钟前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall35 分钟前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊36 分钟前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德1 小时前
CMAKE备忘录
linux·运维·服务器
逐米时代1 小时前
向量数据库选型——Chroma、Qdrant、Milvus到底怎么选
数据库·milvus