PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别
背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库a...
背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库a...
背景 PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。 当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。 根据等待信息,可以了解当前会话的状态。 将来也可以...
背景 在PostgreSQL 9.6以前,垃圾回收存在的问题。 当vacuum回收垃圾时,遇到垃圾记录的xmax大于数据库中现存的最早未提交事务xmin时,不会对其进行回收。 因此当数据库中存在很久为结束的事务时,可能会导致数据库膨胀。 PostgreSQL 9.6加入了快照过旧的功能,目的是防止过长的...
背景 20161004_01.md这篇文档讲解了PostgreSQL postgres_fdw的用法以及9.6的增强。 本文将以实践为主,定一个小目标,讲解一下如何使用postgres_fdw实现sharding。 单元化则可以结合bdr插件来实现。 一、通用场景设计 我以一个最简单易懂的场景来举例,例如所...
背景 PostgreSQL 从 2011年的9.1版本引入FDW开始,发展到现在已经支持几乎所有的外部数据源读写操作,例如mysql,oracle,pgsql,redis,mongo,hive,jdbc,odbc,file,sqlserver,es,S3,……。 https://wiki.postgresql....
背景 PostgreSQL 在向和纵向的扩展能力在开源数据库中一直处于非常领先的地位,例如今年推出的9.6,内置了sharding的功能,同时在scale-up的能力也有非常明显的提升,特别是在多核与高并发处理这块。 社区有同学在128核的机器上测试tpc-b的select only模式可以达到几百万的qps。...
背景 PostgreSQL的tuple(即记录)头信息中有两个字段分别为XMIN,XMAX用于标记行产生与变更的事务号,以标示记录的版本号,事务的可见性等。 这个事务号是32BIT的长度,因此PG设计了一个事务存活的最长时间是约20亿,如果超过20亿必须将这个事务置为frozen。 被置为frozen状态的记...
背景 ext4在红帽5,6的版本中作为主流的文件系统,有非常多的用户群体,也能满足大多数的应用场景需求。 XFS经过几年的发展,从红帽7开始,XFS会成为默认的文件系统。 同时XFS在高并发的场景相比EXT4有较明显的优势,前面我对单机多实例也做过测试,使用EXT4和CGROUP容易遇到IO HANG的问题,...
背景 PostgreSQL 9.6引入了多核计算的强大功能,那么它是如何决策并行计算,以及并行度的呢? 与Oracle不同,PostgreSQL 并不需要用户在SQL中使用HINT来启用并行计算,因为优化器会从成本的角度做出选择,是否使用,以及使用的并行度是多大。 优化器选择并行计算的相关参数 Postgre...
背景 经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale up能力再次拔高一个台阶,标志着开源数据库已经攻克了并行计算的难题。 相信有很多小伙伴已经开始测试了...