Postgresql 查询报错ERROR: canceling statement due to conflict with recovery

Caused by: ERROR: canceling statement due to conflict with recovery

Detail: User query might have needed to see row versions that must be removed.

场景描述

这里我们是流复制环境,仓库从现网的备节点抽取数据导致以上报错。

原理很简单,就是主节点的相关表做了DDL或者DML,wal在备节点回放的时候,备节点的查询还在进行,如此就会发生冲突,干掉备节点查询的语句,报出以上错误。

下图简单演示了报错原理,这里是由DML中的UPDATE引起的冲突,行版本不一致造成相关的错误。


上图可见一个参数max_standby_streaming_delay默认为30秒,也就是说vacuum的时候,相关需要清理的数据仍有事物在使用,则认为有冲突,等待这个参数设置的值,也就是30秒,30秒后则中断连接,报出以上错误。所以这里可能是DDL,比如drop table,truncate table,drop database,drop tablespace等等,也可能是DML,delete,update等等语句都会引起错误发生。

所以这里分为两类处理方式:处理DDL和处理DML

要避免DDL发生,那么需要设置参数max_standby_streaming_delay为-1,这样就会一直等待查询的语句结束为止。如果是从归档中回放产生的冲突,那就max_standby_archive_delay设置为-1。

要避免DML,也就是VACUUM产生的冲突,当然以上的方法也是可用的,这里引入另外一个参数hot_standby_feedback,可以打开该参数(设置为on)避免。

hot_standby_feedback 的原理很简单,就是将备节点的最小活跃事务 ID 定期告知主节点,使得主节点在执行 VACUUM 时对这些事务还需要的数据手下留情。

设置 hot_standby_feedback 的好处是可以减少备节点执行查询时复制冲突的可能,但也有其弊端,即会使主节点先关表的数据延迟回收,从而导致数据膨胀;极端情况下,如果 备节点有一个很长的事务,且涉及表上 DML 操作又很频繁,则表的膨胀则会很严重。

另外也可以考虑设置vacuum_defer_cleanup_age参数,这个参数可以延迟清理dead row,使得在备节点的查询可以读取这些dead row,默认为0,这个参数是在主节点上设置,也是由主节点度量的,所以这个值很难确定设置多少为有效,如果主节点事物数增长很快,那么很快dead row就会被清理,对于备节点的查询冲突没什么效果,所以以上引发的错误,我个人不建议设置该参数解决。

总结:

开启max_standby_streaming_delay或者max_standby_archive_delay也有弊端,如果备节点有长事物,那么,备节点会长时间跟不上主节点,主备节点的数据无法一致,如果有多个级联的备节点,那后果更是不堪设想。

如果这只hot_standby_feedback,那么可能会导致相关表膨胀,如果业务频繁查询,更新,删除,那么这些膨胀的表DML处理肯定效率低下,将会影响业务响应。

另外vacuum_defer_cleanup_age觉的效果不好,主要是在主节点度量这个值,所以不建议设置,这里就不做更深的研究探讨。

参考:

https://www.postgresql.org/docs/11/hot-standby.html

26.5.2. Handling Query Conflicts章节

原文链接:https://blog.csdn.net/dazuiba008/java/article/details/104966409

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351