Recent Posts

PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说

8 minute read

背景 pg_rman备份已经讲完了,接下来讲一下数据恢复。 由于pg_rman使用了物理备份,所以恢复时,与普通物理备份的恢复原理是一样的。 需要将数据文件恢复,同时需要提供recovery.conf,在recovery.conf中指定需要恢复到哪个位置,以及如何获取XLOG归档文件等配置。 数据库恢复 p...

PostgreSQL 最佳实践 - pg_rman 以standby为源的备份浅析

4 minute read

背景 为了降低备份对数据库的性能影响,我们在有standby的情况下,可以选择从standby备份PostgreSQL。 pg_rman是一个备份工具,同样支持从standby备份数据库,但是有一些使用的注意事项。 例如需要连接主库,需要能读取归档目录,需要告诉主库和备库的连接地址,需要备库的$PGDATA等...

pg_dump一致性备份以及cache lookup failed错误的原因分析

2 minute read

背景 PostgreSQL逻辑备份,如何保证备份数据的一致性呢,例如备份的同时,数据被纂改或者有新增的数据,如何保证在全库视角,备份出来的数据是在备份开始时看到的一致数据。 一致性逻辑备份分析 可以追溯到1999年的代码,早期PostgreSQL通过serializable隔离级别来保证备份的一致性。 ht...

PostgreSQL 最佳实践 - 块级别增量备份(pg_rman baseon LSN)源码浅析与使用

12 minute read

背景 对于商业数据库来说,备份的功能一般都非常的全面。 比如Oracle,它的备份工具rman是非常强大的,很多年前就已经支持全量、增量、归档的备份模式,支持压缩等。 还支持元数据存储到数据库中,管理也非常的方便,例如保留多少归档,备份集的管理也很方便,例如要恢复到什么时间点,将此前的备份清除等等。 对于开...

Greenplum 最佳实践 - 估值插件hll的使用(以及hll分式聚合函数优化)

3 minute read

背景 在大数据分析中,通常会有一些估值的需求,例如估计某个时间段有多少新增用户,估计某个时间段有多少用户。 常用的估值算法如HyperLogLog,还有一些其他的估值算法。 可以参考 http://www.pipelinedb.com/ 我在几年前写过如何在PostgreSQL中使用HLL,请参考 ...

PostgreSQL延迟hot standby使用问题及源码浅析

1 minute read

背景 在某些场景中,用户可能需要部署延迟的数据库,比如用来应对误操作。 用户可以创建延迟2小时的standby数据库,如果在2小时内发现了误操作,可以直接使用hot standby,查看误操作前的数据,从而进行恢复。 而不需要对数据库进行PITR恢复操作。 当然这个防范左右还有更好的方法,比如使用我前面写的...

PostgreSQL 最佳实践 - 读写分离

12 minute read

背景 一直以来PostgreSQL数据库在scale up和scale out的方向都走得比较靠前,例如 单元化技术 oleg postgrespro的 PostgreSQL cluster,在分布式事务性能提升,选举算法方面的贡献非常大。 https://github.com/postgre...

PostgreSQL 最佳实践 - 水平分库(基于plproxy)

9 minute read

背景 我一直以来都比较推荐plproxy这个PostgreSQL代理软件, 因为它小巧灵活好用, 效率高. 最近朋友邀请我给他们做个分布式的方案, 所以又把plproxy翻出来了. 本文讲一讲在单节点中如何快速的部署plproxy环境. 环境 PostgreSQL 9.3.1 plproxy 2.x...

一个笛卡尔积的update from语句引发的(内存泄露?)问题

14 minute read

场景 PostgreSQL支持多表JOIN的更新操作,但是如果SQL没有写好,可能会导致出现笛卡尔积的情况。 如果是条查询语句,出现笛卡尔积时,没什么问题,大不了就是查询慢一点。 如果是条更新语句,现在看来可能代码中有内存泄露的BUG,已反馈给PG社区。 另外需要注意PostgreSQL不允许自关联的更新,...