Recent Posts

PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别

4 minute read

背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库a...

PostgreSQL 等待事件 及 等待采样统计(pg_wait_sampling)

5 minute read

背景 PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。 当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。 根据等待信息,可以了解当前会话的状态。 将来也可以...

PostgreSQL 9.6 快照过旧 - 源码浅析

17 minute read

背景 在PostgreSQL 9.6以前,垃圾回收存在的问题。 当vacuum回收垃圾时,遇到垃圾记录的xmax大于数据库中现存的最早未提交事务xmin时,不会对其进行回收。 因此当数据库中存在很久为结束的事务时,可能会导致数据库膨胀。 PostgreSQL 9.6加入了快照过旧的功能,目的是防止过长的...

PostgreSQL 9.6 scale-up高并发增强 VS 9.5

15 minute read

背景 PostgreSQL 在向和纵向的扩展能力在开源数据库中一直处于非常领先的地位,例如今年推出的9.6,内置了sharding的功能,同时在scale-up的能力也有非常明显的提升,特别是在多核与高并发处理这块。 社区有同学在128核的机器上测试tpc-b的select only模式可以达到几百万的qps。...

PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析

10 minute read

背景 PostgreSQL的tuple(即记录)头信息中有两个字段分别为XMIN,XMAX用于标记行产生与变更的事务号,以标示记录的版本号,事务的可见性等。 这个事务号是32BIT的长度,因此PG设计了一个事务存活的最长时间是约20亿,如果超过20亿必须将这个事务置为frozen。 被置为frozen状态的记...

PostgreSQL 9.6 并行计算 在 xfs, ext4 下的表现对比

2 minute read

背景 ext4在红帽5,6的版本中作为主流的文件系统,有非常多的用户群体,也能满足大多数的应用场景需求。 XFS经过几年的发展,从红帽7开始,XFS会成为默认的文件系统。 同时XFS在高并发的场景相比EXT4有较明显的优势,前面我对单机多实例也做过测试,使用EXT4和CGROUP容易遇到IO HANG的问题,...

PostgreSQL 9.6 并行计算 优化器算法浅析 - 以及如何强制并行度

9 minute read

背景 PostgreSQL 9.6引入了多核计算的强大功能,那么它是如何决策并行计算,以及并行度的呢? 与Oracle不同,PostgreSQL 并不需要用户在SQL中使用HINT来启用并行计算,因为优化器会从成本的角度做出选择,是否使用,以及使用的并行度是多大。 优化器选择并行计算的相关参数 Postgre...

PostgreSQL 9.6 引领开源数据库攻克多核并行计算难题

13 minute read

背景 经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale up能力再次拔高一个台阶,标志着开源数据库已经攻克了并行计算的难题。 相信有很多小伙伴已经开始测试了...