PostgreSQL 从库查询被莫名KILL,为什么,群友问题--大聪明给你回答一下
❝开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3400人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 +9)(1 2 3 4 5 6 7 8群已经爆满 9群 300+,开10群PolarDB专业学习群110+)
最近一篇文章,引出一个群里的同学的问题,他是看完PolarDB for PG中的对于PG 数据库主从复制中的关于在主库进行vacuum 或者checkpoint的时候,从库正在运行的SQL会被kill的问题的原因是什么的思考。
我们确认几点
1 PG 的主从复制是通过streaming replication 流复制机制,将主库的WAL中的操作,重放到从库,来保证主从数据的一致。在从库中查询只能查到已经用WAL的位置上的数据,如果查询要访问的页面们,注意是“们”,那么查询就会出现数据一致性的问题。 比如重放两个表的数据,那是在串行重放,你一个JOIN语句,1表和2表的数据很可能不一致,你就会出现读数据的冲突,而我们怎么发现这个冲突。
那就是在从库中有一个机制叫 hot standby conflict resolution,当主库在做vacuum, checkpoint 从库重放这些WAL ,会发现与正在运行的查询有冲突。
举例你主库进行CHECKPOINT ,然后你在CHECKPOINT前做了一个事情DROP TABLE ,从库在接受到这些,他必须进行对应的操作,而此时你的查询就查询了这个DROP TABLE 的 TABLE,你猜从库会怎样,他们必须KILL 你的查询,因为这个表没有了。
出现这样的情况被KILL的种类会比较多,比如snapshot confilct with recovery, canceling statement due to conflict with recovery,等等,数据的一致性优先于你的从库查询。
说到这里,一定有人说,这很容易你就调整 max_standby_streaming_delay,我个人认为,这属于身体有病,不去医院,找杜冷丁。
怎么说呢,纯粹作死!!
你调整了时长,你从库可以在查询到这个地方的时候,WAL在从库不推进了,你查询过去了,你主从延迟可就大发了。你从库replay被停滞了。
其实在PG中很多一些场景,一些大聪明都这么给主意,什么模拟ORACLE 的闪回了,类似的等等,用去吧,谁用谁倒霉。
那么正确的方案是什么?
1 你别那从库当你的OLAP的从库,很多人都是大聪明,那物理复制的从库当OLAP的从库,什么大查询都网上放,以为是MYSQL了。
正确的方案是做逻辑复制,而不是物理复制,你确定好几张表,然后做逻辑复制,通过逻辑复制的方案来查询这些数据,OLAP 也好OLTP也可以,这样就不会出现我们上面说的查询被KILL的问题,因为是逻辑的方式。
但这样的方案依然有问题,比如你的字段调整了,你的字段增加了等等,这些。
当然还有大聪明告诉你,你就把 hot_standby_feedback = on 给加上,让从库吧XMIN给主库,避免过早的清理tuple 。
可后面等你的是
1 数据库表膨胀的风险
2 vacuum 一次的效果变差(skip)
3 主库留存大量的旧版本数据
然后后面会发生什么,那就看你怎么去查询从库,你要是一个查询半个小时,那就乐大了。
所以,PG这个数据库,功能很多,关联性也很多,大聪明更多,你要是把鸡毛当令箭,受苦的是谁,谁知道。
最后一句你们怎么解决这个问题的,阿里云RDS PG + DUCKDB从库的方案 和 PolarDB for PostgreSQL 的方案,都没这毛病。
和架构师沟通那种“一坨”的系统,推荐只能是OceanBase,Why ?
OceanBase Hybrid search 能力测试,平换MySQL的好选择
写了3750万字的我,在2000字的OB白皮书上了一课--记 《OceanBase 社区版在泛互场景的应用案例研究
OceanBase 6大学习法--OBCA视频学习总结第六章
OceanBase 6大学习法--OBCA视频学习总结第五章--索引与表设计
OceanBase 6大学习法--OBCA视频学习总结第五章--开发与库表设计
OceanBase 6大学习法--OBCA视频学习总结第四章 --数据库安装
OceanBase 6大学习法--OBCA视频学习总结第三章--数据库引擎
OceanBase 架构学习--OB上手视频学习总结第二章 (OBCA)
OceanBase 6大学习法--OB上手视频学习总结第一章
没有谁是垮掉的一代--记 第四届 OceanBase 数据库大赛
跟我学OceanBase4.0 --阅读白皮书 (OB分布式优化哪里了提高了速度)
跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)
跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
“合体吧兄弟们!”——从浪浪山小妖怪看OceanBase国产芯片优化《OceanBase “重如尘埃”之歌》
MongoDB “升级项目” 大型连续剧(3)-- 自动校对代码与注意事项
MongoDB “升级项目” 大型连续剧(2)-- 到底谁是"der"
MongoDB “升级项目” 大型连续剧(1)-- 可“生”可不升
MongoDB 大俗大雅,上来问分片真三俗 -- 4 分什么分
MongoDB 大俗大雅,高端知识讲“庸俗” --3 奇葩数据更新方法
MongoDB 大俗大雅,高端的知识讲“通俗” -- 2 嵌套和引用
MongoDB 大俗大雅,高端的知识讲“低俗” -- 1 什么叫多模
MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通
MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB 麻烦专业点,不懂可以问,别这么用行吗 ! --TTL
免费PolarDB云原生课程,听课“争”礼品,重塑云上知识,提高专业能力
非“厂商广告”的PolarDB课程:用户共创的新式学习范本--7位同学获奖PolarDB学习之星
“当复杂的SQL不再需要特别的优化”,邪修研究PolarDB for PG 列式索引加速复杂SQL运行
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
POLARDB 添加字段 “卡” 住---这锅Polar不背
PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)
PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)
PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火
PostgreSQL 新版本就一定好--由培训现象让我做的实验
说我PG Freezing Boom 讲的一般的那个同学,专帖给你,看看这次可满意
PostgreSQL 无服务 Neon and Aurora 新技术下的新经济模式 (翻译)
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始
PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁
PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
PostgreSQL 分组查询可以不进行全表扫描吗?速度提高上千倍?
POSTGRESQL --Austindatabaes 历年文章整理
PostgreSQL 查询语句开发写不好是必然,不是PG的锅
这个 PostgreSQL 让我有资本找老板要 鸡腿 鸭腿 !!
MySQL相关文章
一篇为MySQL用户,分析版本核心差异的文章--8.028-8.4的差异
那个MySQL大事务比你稳定,主从延迟低,为什么? Look my eyes! 因为宋利兵宋老师