昨天实验室里装了一套PolarDB单机版,这个版本相当于是线上的PolarDB-O的简化版,是基于PostgreSQL 11的。数据库启动以后可以看到进程结构和PostgreSQL十分类似:
每个进程前面的Postgres前缀都没有去掉。不过我们还是看出了PolarDB与原生态的PG的些许不同之处,那就是多了Polar Parallel Bgwriter的存在。PostgreSQL的脏块刷新机制一直是一个性能痛点,Backend承担了脏块刷新的部分职责,使得在高并发下,还是会有很多脏块是由Backend负责写入文件的,这会影响前台应用的性能。究其原因是因为PG的脏块刷新由多个组件负责,BGWRITER、CHECKPOINTER和Backend都可以刷脏块。PolarDB可能是看到了这个痛点,于是增加了一组自己的并行bgwriter进程,用于脏块的刷入。实际效果上看,还是不错的。
从这张非Backend脏块写入占比来看,大多数情况下,Backend不需要写入脏块。我们再来看看BGWriter写入脏块比例的情况。
昨天下班前我做了一次系统压测,可