云数据库产品应改造PostgreSQL逻辑复制槽缺陷--来自真实企业的需求
❝开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3000人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 +9)(1 2 3 4 5 6 7群均已爆满,开8群近400 9群 150+,将开10群)
最近在使用PostgreSQL中遇到一些问题,主要集中在逻辑复制槽的部分,在大型企业使用PostgreSQL中会遇到一个核心的问题,数据的传递和流转的问题,大部分使用PostgreSQL的公司,最终使用的技术都是逻辑复制槽方式。
在更大量的数据传递的过程中,我们遇到的最大的问题就是逻辑复制槽的延迟,给系统给业务带来危害和业务损失的问题,这里进行阐述,希望基于POSTGRESQL研发的国产数据库或RDS,云原生数据库厂商能解决POSTGRESQL的逻辑复制槽的问题。
问题的阐述:
多个逻辑复制槽并用的问题。
PostgreSQL 数据库可以支持多个逻辑库,一个逻辑库是订阅的最大单位,这里需要注意逻辑库的数量,逻辑库的数量增多,订阅逻辑复制槽的数量会同时提高,这非常不利于系统的运行和安全,尤其在数据库系统有多个逻辑订阅者的情况下。于此同时我们还存在其他的需求,比如A客户要30张表,B客户要60张表,他们虽然在一个逻辑库,但是他们要的表不同,我就需要建立两个逻辑复制槽分别对这些表进行输出,产生至少两个订阅,这就导致逻辑复制槽的数量在业务复杂性提高的同时,会远远高于逻辑库的数量。
问题就产生了
1 一个订阅者,拥有一个逻辑复制槽,也就是说即使两个订阅者需要的数据是一致的,但是他们的目的不同,就需要建立两个逻辑复制槽
2 当多个订阅者由于订阅的消费WAL数据的速度不同,会导致由于一个订阅者的消费速度慢而影响整个数据库的WAL的存储造成WAL的堆积
3 一个数据库实例,有多个逻辑库,每个逻辑库一个订阅,这样的情况下订阅的数量也很大,会造成内存和CPU的消耗异常,逻辑复制槽本身限制PG数据库的数据流转的性能和便利性
4 在PG数据库进行切换的过程中,并不带有逻辑复制槽转移的功能,这里需要在新的库上重建逻辑复制槽,这点在很多企业中是无法接受,虽然通过patroni的方案可以进行切换后,逻辑复制槽的重建,但这也并非一个完美的解决方案,每次建立逻辑复制槽失效,在重建逻辑复制槽对于应用部门都是不能被接受的。
5 重复的数据流转的目的地不同,导致多个订阅,最终导致网络流量和数据带宽的超量使用的问题。
建议基于POSTGRESQL厂商开发出一种新的模式来支援POSTGRESQL逻辑复制槽的部分,可以作为一个新的中介使用,方案如下。
这里假设,数据库软件公司开放出一套中间件,通过中间件安装在一台主机中,PG 只需要建立一个物理复制槽的方式来将数据全量同步到中间件,中间件再通过自身的方式给其他的数据订阅方数据。
在目前没有厂商进行优化方案产生的情况下,可以采用从库提供逻辑复制槽的方式来减轻主库的压力,具体方案如下
1 使用POSTGRESQL16版本, wal_level= logical ,从库必须启用 hot_standby_feedback=on, 在主库通过物理复制槽的方式给付从库数据,实际上就是石红data streaming的方式,给付物理的数据流给从库。
从库上进行 pg_create_logical_replication_slot的逻辑复制槽的建立,来隔绝主库所承受的的压力和风险。
+----------------+
| 主库 PG |
| 写操作 |
+--------+-------+
|
(物理复制槽, streaming replication)
|
+--------v--------+
| 从库 PG |
| hot_standby |
+---+----------+--+
| |
(逻辑复制槽) | | (逻辑复制槽)
| |
+--------v--+ +---v--------+
| Debezium | | PG订阅者 |
| + Kafka | | 子系统B |
+-----------+ +------------+
产品设计,在大型企业中使用PostgreSQL 逻辑复制槽的应用需求越来越多,而PostgreSQL逻辑复制槽功能本身存在很多的应用问题,比如上面提到的资源消耗过多,这里我们以ORACLE的LogMiner作为比对对象,虽然Oracle并未提供如不消费日志就不删除日志的功能,相对PostgreSQL对于应用是友好的,可我们需要更灵活的处理方式,让用户可以设置在特殊情况下,直接选择抛弃日志,保证磁盘空间的安全设置,避免由于逻辑复制槽不消费,或消费慢导致的日志挤压后的磁盘空间满了后的数据库运行系统的风险。
同时我们希望PostgreSQL能提供如ORACLE可以设置对外重放日志的时间段的设置,方便数仓在无法追上后的继续增量数据的补偿和跳过后的继续读取日志中的数据的能力。
所以这里建议一些云厂商,针对PostgreSQL在逻辑复制槽中的缺陷问题,予以重视。开发出更适合多逻辑库,多复制槽输出数据的高性能场景的支持,方便大型上云的企业,更好更方便的使用PostgreSQL 在大型企业Saas类的应用场景的需求满足。
泉城济南IvorySQL 2025 “雷暴云” 就在云和云原生会场
SQL SERVER 2025发布了, China幸亏有信创!
MongoDB 麻烦专业点,不懂可以问,别这么用行吗 ! --TTL
PostgreSQL 新版本就一定好--由培训现象让我做的实验
删除数据“八扇屏” 之 锦门英豪 --我去-BigData!
写了3750万字的我,在2000字的OB白皮书上了一课--记 《OceanBase 社区版在泛互场景的应用案例研究》
跟我学OceanBase4.0 --阅读白皮书 (OB分布式优化哪里了提高了速度)
跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)
跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)
MongoDB 相关文章
MongoDB “升级项目” 大型连续剧(4)-- 与开发和架构沟通与扫尾
MongoDB “升级项目” 大型连续剧(3)-- 自动校对代码与注意事项
MongoDB “升级项目” 大型连续剧(2)-- 到底谁是"der"
MongoDB “升级项目” 大型连续剧(1)-- 可“生”可不升
MongoDB 大俗大雅,上来问分片真三俗 -- 4 分什么分
MongoDB 大俗大雅,高端知识讲“庸俗” --3 奇葩数据更新方法
MongoDB 大俗大雅,高端的知识讲“通俗” -- 2 嵌套和引用
MongoDB 大俗大雅,高端的知识讲“低俗” -- 1 什么叫多模
MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通
MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
POLARDB 添加字段 “卡” 住---这锅Polar不背
PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)
PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)
PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火
PostgreSQL 无服务 Neon and Aurora 新技术下的新经济模式 (翻译)
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始
PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁
PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
PostgreSQL 分组查询可以不进行全表扫描吗?速度提高上千倍?
POSTGRESQL --Austindatabaes 历年文章整理
PostgreSQL 查询语句开发写不好是必然,不是PG的锅
MySQL相关文章