第十二届 PostgreSQL 技术大会有感
1前言
大家期待已久的第十二届 PostgreSQL 技术大会于今天圆满落幕啦。此次大会以"突破•进化•共赢 —— 安全可靠,共建与机遇"为主题,带来了诸多精彩纷呈的议题。线下的主会场我全程参与了(中奖绝缘体),由于个人原因,周六线下场只能线上聆听了一下,由于硬核内容太多,在此也简单记录一下对个人关注的 topic 的一些感触与想法。
再说一遍!干货满满,错过的小伙伴记得观看回放,👉🏻 https://space.bilibili.com/601631547/。
2所感
主会场第一位上场的是唐成老师,议题是《如何使用 Clup 快速搭建 PolarDB》,PolarDB 有自己独到的优势,解决了传统 PostgreSQL 的一些痛点与痒点
CLup 是一款实现 PostgreSQL / PolarDB 数据库的私有云 RDS 产品,据悉,CLup 和 EcoX 类似,同样基于 zookeeper,强大的仲裁管理和自动化,支持集群统一管理、统一运维等,感兴趣的同志可以与唐成老师联系。
第二位是来自阿里巴巴的贾新华老师,议题是 《云原生数据库PolarDB一站式设计理念及实践》,同样基于 "log is database" 的思想。我们知道,传统 PostgreSQL 的一个老大难问题便是 snapshot conflict,在备库查询由于 MVCC 的缘故,会报错,并且由于单进程回放,遇到一些网络风暴/冻结风暴,延迟就蹭蹭蹭得上去了。PolarDB 的优势在于基于共享存储,不需要传输 WAL , 只需要传输 WAL metadata,并且采用多个 replay process,支持异步并行恢复,使得只读实例的延迟极低,下来有空了必须得捣鼓玩一下 PolarDB 。
第三位是来自酷克数据的马涛老师,议题是《数据仓库云服务的再演进》
HashData 主打云上数仓,用于解决
数据的存储和计算不分离,数据库孤岛情况严重 ⽊桶效应,服务器故障会导致集群性能严重下降 并发能⼒和可扩展性不⾜,分库分表造成⼤量数据冗余 升级、扩容等操作复杂,运维成本⾼,应⽤影响⼤ 硬件资源利用率等等痛点
HashData 同样是基于 PostgreSQL (GP系),所以兼容 PostgreSQL 二进制协议,无缝与 libpq/PostgreSQL JDBC 等兼容,PGer 上手犹如九阳神功护体。
第四位是 PostgreSQL 社区的大管家,Bruce 带来的议题是 《Beyond Joins and Indexes》,由于语种不同,建议各位直接看 PPT,https://momjian.us/main/blogs/pgblog/2023.html 下载,主要介绍了各种算子。
下午场第一位上场的是来自信通院的刘思源老师,带来的议题是《数据库产业与发展综述-中国信通院》,带来的内容也很硬核,介绍了各种数据库的趋势与发展情况,在我国关系型数据库依旧占据着主导地位,所以卷的不行呀。
此次议题介绍了数据库的前沿技术,作为活到老学到老的 DBA,学习不能落下呀。
和 2012 ~ 2021 年 SIGMOD / VLDB 会议主题词云分析类似,新硬件驱动的数据管理、智能化数据管理DB4AI,AI4DB,多模态数据管理等
接着是王少华老师分析的《阿里云RDS PostgreSQL内核解密》,阿里云 RDS 实现了透明加密(TDE)、SQL 审计、Buffer Pool Online Resize(这个功能很赞,调整 shared buffers 再也不需要申请停机窗口与业务扯皮了)和 SQL 限流等,同时集成了 Babelfish 插件,进一步降低了从 SQLServer 迁移到 PostgreSQL 的难度与成本。另外,据我所知,阿里云 RDS 还解决了 Failover Slot 与 plancache/metacache 等问题。
然后上场的是硬核的 vage 老师了,一行代码提升百倍性能,此题议题十分符合 vage 老师的一贯作风,必讲 kernel。由于过于硬核,笔者还需要下来去消化一下,硬核吧 👇🏻
于巍老师的议题临时做了调整,调整到了上午,我个人还是按照最初安排的议程来写,没错于巍老师就是讲内核系列课程的,没有看过的记得去 B站 搜一下回放,话说 B 站今天晚上又双叒叕崩了...
我特别关注的是 CSN 的实现,用于解决传统高并发场景下 snapshot 获取机制的瓶颈
其他老师的分享由于一些原因没有太仔细听,后面就轮到我上场了,没错,PostgreSQL DBA Daily 2.0 如约而至,熟悉的味道熟悉的配方,幽默诙谐的风格,在 1.0 的基础上添加了大量实战经验与案例,后续我会安排纸质版的印刷,找一期活动进行发放。
第二天的线下场由于不在现场,并且我个人是 DBA,所以我选择性地听了一些内容。
第一个议题来自阿里巴巴的胡雅竣老师,《PolarDB-pg的内存使用分析与优化》,此议题同样提到了 PostgreSQL 内存里面的 plancache/relcache,再加上进程模型,连接数一多很容易受到 OOM 的困扰,所以为什么最佳实践里会推荐搭配上连接池 pgbouncer(内置连接池依旧遥遥无期),而 PolarDB 的优化方式是将 private memory 改成了 Global memory,采用类似 LRU 的算法,解决这个老大难问题。
其次听了来自腾讯的施博文老师的《逻辑复制原理与实践经验分享》,逻辑复制想必各位都很熟悉了,主要是案例,十分有代表性,第一个案例是用户重启时,实例运行 pg_ctl stop 命令卡住,无法停库
这个其实和归档类似,如果数据库开启了归档,smart, fast 停库时进程会发起最后一次archive周期,将所有 .ready 的 WAL 日志进行归档,除非中间 archive_command 遇到错误,否则要等所有的 .ready 文件都触发并执行完成 archive_command。同理,如果有 walsender 进程存在(例如有standby,有 pg_basebackup,有 pg_receivewal 等利用流复制协议的客户端就有 walsender 进程),那么要等这个 walsender 将所有未发送完的 WAL 日志都发送给下游。
第二个案例我在生产环境也遇到过,但是没有细分析,真是十分感谢施博文老师的分享,可以简单理解成缺陷,当对象过多时会存在此类情况
接下来就是单口相声冯董啦,还是那样的慷慨激昂,演讲能力 MAX,议题是《本地优先的 RDS 开源替代品— Pigsty》,没错读 /ˈpiɡˌstaī/,猪圈。
Pigsty 是更好的开箱即用,本地优先,开源免费的 RDS PostgreSQL 替代。Pigsty 是 “PostgreSQL In Great STYle” 的缩写,它让 PostgreSQL 进入最全盛的状态,从世界上最强大的开源数据库内核,变为开箱即用的六边形战士 RDS 服务。走过路过,不要错过,且看冯老板现场脱口秀为您一一道来!
就贴一个以前的图吧。
下午听了一下书利、彭冲以及吴聪的分享,书利的议题是《PostgreSQL 逻辑复制的前世今生》,里面介绍了逻辑复制的发展史以及逻辑复制对于去O迁移的意义,这个很赞👍🏻,书利不仅酒量了得,文采也不错,笔耕不缀,https://www.modb.pro/u/370491
彭冲老师的分享很硬核,我也学到了一些奇怪的新知识,点个赞 👍🏻,比如不为人知的统计信息异常,更多内容可以参考他的主页 https://www.modb.pro/u/15675
吴聪带来的分享挺有趣,其中第二个案例十分具有代表性,当从 Oracle 迁移到 PostgreSQL 时,需要特别注意全表扫描带来的影响,在 Oracle 里面没有问题,不代表 PostgreSQL 里面没有问题。
三月五号就是线上场了,我听了几个感兴趣的议题,第一个是来自腾讯的王宏博老师,议题是《PostgreSQL的事务实现:从单机到分布式》,介绍了事务原理,以及 14 版本中对于事物模块的相关优化,社区 CSN 提案的优缺点讨论,以及基于 PostgreSQL 的分布式数据库 PGXC 基于全局快照的事务模型到 TDSQL-PG 的基于的全局 CSN 的事务模型演进与优化,14 版本的优化可以参照如下
snapshot scalability: Don’t compute global horizons while building snapshots. snapshot scalability: Move PGXACT->xmin back to PGPROC. snapshot scalability: Move PGXACT->vacuumFlags to ProcGlobal->vacuumFlags. snapshot scalability: Move subxact info to ProcGlobal, remove PGXACT. snapshot scalability: Introduce dense array of in-progress xids. snapshot scalability: cache snapshots using a xact completion counter. Fix race condition in snapshot caching when 2PC is used.
下午由于时间冲突,只听了一下敏哥的《再谈高可用》以及华为李长军老师的《PostgreSQL数据库典型故障案例及处理方法》,文字虽少,内容却很干。
敏哥就高可用再次提出了个人的独到见解与想法(敏哥是笔者的师傅,带我进了 PostgreSQL 这个圈子),介绍了常见的高可用方案,patroni/repmgr/pgpool/stolon/EcoX等等,敏哥在高可用这块的经验十分丰富
接下来是《PostgreSQL数据库典型故障案例及处理方法》,话不多说自己看吧,由于 PPT 内容与文字有限,建议下来观看回放
第一个是社区 BUG,升级到 12.8 版本以上,之前的版本需要注意对包含发布订阅的含有TOAST 的表进行结构变更,容易导致 OOM
第二个案例十分有趣,是十分底层的 glibc 导致的,这种底层的 glibc 有一些隐蔽的坑,不免让人十分费解。
这个案例和唐成老师之前分享的 Postgis中计算某些特殊点的距离时特别慢的诡异问题 有点异曲同工之妙,
实际高版本的 glibc 解决的方法是直接 丢弃 更高精度的计算的方法。所以 glibc 的数学库cos 的精度怎么样,还真不好确定。有可能在某些特别的值上有比较大的误差。
3小结
OK,以上便是笔者个人的一些感触与想法,希望那些没有去到现场以及错过此次大会的同志,看了我的分享能有所收获,最后以个人的奖项结束吧。