PostgreSQL学徒

第十二届 PostgreSQL 技术大会有感

1前言

大家期待已久的第十二届 PostgreSQL 技术大会于今天圆满落幕啦。此次大会以"突破•进化•共赢 —— 安全可靠,共建与机遇"为主题,带来了诸多精彩纷呈的议题。线下的主会场我全程参与了(中奖绝缘体),由于个人原因,周六线下场只能线上聆听了一下,由于硬核内容太多,在此也简单记录一下对个人关注的 topic 的一些感触与想法。

再说一遍!干货满满,错过的小伙伴记得观看回放,👉🏻 https://space.bilibili.com/601631547/。

2所感

主会场第一位上场的是唐成老师,议题是《如何使用 Clup 快速搭建 PolarDB》,PolarDB 有自己独到的优势,解决了传统 PostgreSQL 的一些痛点与痒点

Image

CLup 是一款实现 PostgreSQL / PolarDB 数据库的私有云 RDS 产品,据悉,CLup 和 EcoX 类似,同样基于 zookeeper,强大的仲裁管理和自动化,支持集群统一管理、统一运维等,感兴趣的同志可以与唐成老师联系。

Image

第二位是来自阿里巴巴的贾新华老师,议题是 《云原生数据库PolarDB一站式设计理念及实践》,同样基于 "log is database" 的思想。我们知道,传统 PostgreSQL 的一个老大难问题便是 snapshot conflict,在备库查询由于 MVCC 的缘故,会报错,并且由于单进程回放,遇到一些网络风暴/冻结风暴,延迟就蹭蹭蹭得上去了。PolarDB 的优势在于基于共享存储,不需要传输 WAL , 只需要传输 WAL metadata,并且采用多个 replay process,支持异步并行恢复,使得只读实例的延迟极低,下来有空了必须得捣鼓玩一下 PolarDB 。

Image

第三位是来自酷克数据的马涛老师,议题是《数据仓库云服务的再演进》

Image

HashData 主打云上数仓,用于解决

  1. 数据的存储和计算不分离,数据库孤岛情况严重
  2. ⽊桶效应,服务器故障会导致集群性能严重下降
  3. 并发能⼒和可扩展性不⾜,分库分表造成⼤量数据冗余
  4. 升级、扩容等操作复杂,运维成本⾼,应⽤影响⼤
  5. 硬件资源利用率等等痛点

HashData 同样是基于 PostgreSQL (GP系),所以兼容 PostgreSQL 二进制协议,无缝与 libpq/PostgreSQL JDBC 等兼容,PGer 上手犹如九阳神功护体。

第四位是 PostgreSQL 社区的大管家,Bruce 带来的议题是 《Beyond Joins and Indexes》,由于语种不同,建议各位直接看 PPT,https://momjian.us/main/blogs/pgblog/2023.html 下载,主要介绍了各种算子。

Image

下午场第一位上场的是来自信通院的刘思源老师,带来的议题是《数据库产业与发展综述-中国信通院》,带来的内容也很硬核,介绍了各种数据库的趋势与发展情况,在我国关系型数据库依旧占据着主导地位,所以卷的不行呀。

Image

此次议题介绍了数据库的前沿技术,作为活到老学到老的 DBA,学习不能落下呀。

Image

和 2012 ~ 2021 年 SIGMOD / VLDB 会议主题词云分析类似,新硬件驱动的数据管理、智能化数据管理DB4AI,AI4DB,多模态数据管理等

Image

接着是王少华老师分析的《阿里云RDS PostgreSQL内核解密》,阿里云 RDS 实现了透明加密(TDE)、SQL 审计、Buffer Pool Online Resize(这个功能很赞,调整 shared buffers 再也不需要申请停机窗口与业务扯皮了)和 SQL 限流等,同时集成了 Babelfish 插件,进一步降低了从 SQLServer 迁移到 PostgreSQL 的难度与成本。另外,据我所知,阿里云 RDS 还解决了 Failover Slot 与 plancache/metacache 等问题。

然后上场的是硬核的 vage 老师了,一行代码提升百倍性能,此题议题十分符合 vage 老师的一贯作风,必讲 kernel。由于过于硬核,笔者还需要下来去消化一下,硬核吧 👇🏻

Image

Image

于巍老师的议题临时做了调整,调整到了上午,我个人还是按照最初安排的议程来写,没错于巍老师就是讲内核系列课程的,没有看过的记得去 B站 搜一下回放,话说 B 站今天晚上又双叒叕崩了...

Image

我特别关注的是 CSN 的实现,用于解决传统高并发场景下 snapshot 获取机制的瓶颈

Image

其他老师的分享由于一些原因没有太仔细听,后面就轮到我上场了,没错,PostgreSQL DBA Daily 2.0 如约而至,熟悉的味道熟悉的配方,幽默诙谐的风格,在 1.0 的基础上添加了大量实战经验与案例,后续我会安排纸质版的印刷,找一期活动进行发放。

Image

第二天的线下场由于不在现场,并且我个人是 DBA,所以我选择性地听了一些内容。

第一个议题来自阿里巴巴的胡雅竣老师,《PolarDB-pg的内存使用分析与优化》,此议题同样提到了 PostgreSQL 内存里面的 plancache/relcache,再加上进程模型,连接数一多很容易受到 OOM 的困扰,所以为什么最佳实践里会推荐搭配上连接池 pgbouncer(内置连接池依旧遥遥无期),而 PolarDB 的优化方式是将 private memory 改成了 Global memory,采用类似 LRU 的算法,解决这个老大难问题。

Image

Image

其次听了来自腾讯的施博文老师的《逻辑复制原理与实践经验分享》,逻辑复制想必各位都很熟悉了,主要是案例,十分有代表性,第一个案例是用户重启时,实例运行 pg_ctl stop 命令卡住,无法停库

Image

这个其实和归档类似,如果数据库开启了归档,smart, fast 停库时进程会发起最后一次archive周期,将所有 .ready 的 WAL 日志进行归档,除非中间 archive_command 遇到错误,否则要等所有的 .ready 文件都触发并执行完成 archive_command。同理,如果有 walsender 进程存在(例如有standby,有 pg_basebackup,有 pg_receivewal 等利用流复制协议的客户端就有 walsender 进程),那么要等这个 walsender 将所有未发送完的 WAL 日志都发送给下游。

第二个案例我在生产环境也遇到过,但是没有细分析,真是十分感谢施博文老师的分享,可以简单理解成缺陷,当对象过多时会存在此类情况

Image

接下来就是单口相声冯董啦,还是那样的慷慨激昂,演讲能力 MAX,议题是《本地优先的 RDS 开源替代品— Pigsty》,没错读 /ˈpiɡˌstaī/,猪圈。

Pigsty 是更好的开箱即用,本地优先,开源免费的 RDS PostgreSQL 替代。Pigsty 是 “PostgreSQL In Great STYle” 的缩写,它让 PostgreSQL 进入最全盛的状态,从世界上最强大的开源数据库内核,变为开箱即用的六边形战士 RDS 服务。走过路过,不要错过,且看冯老板现场脱口秀为您一一道来!

就贴一个以前的图吧。

Image

下午听了一下书利、彭冲以及吴聪的分享,书利的议题是《PostgreSQL 逻辑复制的前世今生》,里面介绍了逻辑复制的发展史以及逻辑复制对于去O迁移的意义,这个很赞👍🏻,书利不仅酒量了得,文采也不错,笔耕不缀,https://www.modb.pro/u/370491

Image

Image

彭冲老师的分享很硬核,我也学到了一些奇怪的新知识,点个赞 👍🏻,比如不为人知的统计信息异常,更多内容可以参考他的主页 https://www.modb.pro/u/15675

Image

吴聪带来的分享挺有趣,其中第二个案例十分具有代表性,当从 Oracle 迁移到 PostgreSQL 时,需要特别注意全表扫描带来的影响,在 Oracle 里面没有问题,不代表 PostgreSQL 里面没有问题。

Image

三月五号就是线上场了,我听了几个感兴趣的议题,第一个是来自腾讯的王宏博老师,议题是《PostgreSQL的事务实现:从单机到分布式》,介绍了事务原理,以及 14 版本中对于事物模块的相关优化,社区 CSN 提案的优缺点讨论,以及基于 PostgreSQL 的分布式数据库 PGXC 基于全局快照的事务模型到 TDSQL-PG 的基于的全局 CSN 的事务模型演进与优化,14 版本的优化可以参照如下

  1. snapshot scalability: Don’t compute global horizons while building snapshots.
  2. snapshot scalability: Move PGXACT->xmin back to PGPROC.
  3. snapshot scalability: Move PGXACT->vacuumFlags to ProcGlobal->vacuumFlags.
  4. snapshot scalability: Move subxact info to ProcGlobal, remove PGXACT.
  5. snapshot scalability: Introduce dense array of in-progress xids.
  6. snapshot scalability: cache snapshots using a xact completion counter.
  7. Fix race condition in snapshot caching when 2PC is used.

下午由于时间冲突,只听了一下敏哥的《再谈高可用》以及华为李长军老师的《PostgreSQL数据库典型故障案例及处理方法》,文字虽少,内容却很干。

敏哥就高可用再次提出了个人的独到见解与想法(敏哥是笔者的师傅,带我进了 PostgreSQL 这个圈子),介绍了常见的高可用方案,patroni/repmgr/pgpool/stolon/EcoX等等,敏哥在高可用这块的经验十分丰富

Image

接下来是《PostgreSQL数据库典型故障案例及处理方法》,话不多说自己看吧,由于 PPT 内容与文字有限,建议下来观看回放

Image

第一个是社区 BUG,升级到 12.8 版本以上,之前的版本需要注意对包含发布订阅的含有TOAST 的表进行结构变更,容易导致 OOM

Image

第二个案例十分有趣,是十分底层的 glibc 导致的,这种底层的 glibc 有一些隐蔽的坑,不免让人十分费解。

Image

这个案例和唐成老师之前分享的 Postgis中计算某些特殊点的距离时特别慢的诡异问题 有点异曲同工之妙,

实际高版本的 glibc 解决的方法是直接 丢弃 更高精度的计算的方法。所以 glibc 的数学库cos 的精度怎么样,还真不好确定。有可能在某些特别的值上有比较大的误差。

3小结

OK,以上便是笔者个人的一些感触与想法,希望那些没有去到现场以及错过此次大会的同志,看了我的分享能有所收获,最后以个人的奖项结束吧。

Image