Recent Posts

Hacking PostgreSQL

3 minute read

本文为转载文章,原文地址 http://www.cnblogs.com/Yinxinghan/p/Hacking_PostgreSQL.html 背景 这篇文章主要讲解了如何 Hacking PostgreSQL 数据库,总结了一些常用方法。 SQL 注入 大体上和 MySQL 差不多,有一些变量不一样。 ...

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率

1 minute read

背景 通常在数据库中最小粒度的锁是行锁,当一个事务正在更新某条记录时,另一个事务如果要更新同一条记录(或者申请这一条记录的锁),则必须等待锁释放。 通常持锁的时间需要保持到事务结束,也就是说,如果一个长事务持有了某条记录的锁,其他会话要持有这条记录的锁,可能要等很久。 如果某张表的全表或者大部分记录要被更新的...

PostgreSQL DaaS设计注意 - schema与database的抉择

17 minute read

背景 市面上有一些提供DaaS服务的厂商,例如heroKu,可能有上百万的数据库服务; 又比如提供PaaS平台的服务商,数据库也会有很多,同事这些数据库可能也是模板化的,这些厂商并不一定是为每个客户都新建一个数据库集群来满足数据库的需求。 很有可能是使用数据库或者schema来隔离不同用户的。 1. 例如将...

PostgreSQL 可靠性分析 - 关于redo block原子写

14 minute read

背景 PostgreSQL 可靠性与大多数关系数据库一样,都是通过REDO来保障的。 群里有位童鞋问了一个问题,为什么PostgreSQL的REDO块大小默认是8K的,不是512字节。 这位童鞋提问的理由是,大多数的块设备扇区大小是512字节的,512字节可以保证原子写,而如果REDO的块大于512字节,可能...

PostgreSQL 9.6 内核优化 - sort 性能增强

5 minute read

背景 PostgreSQL 9.6在排序这块做了一些性能增强,前面一篇主要讲了排序算法的变更。 《PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)》 本文针对另外几个SORT增强...

PostgreSQL md5 对比 MySQL - 秘钥认证

3 minute read

背景 PostgreSQL支持的认证方法很多,例如 20.3.1. Trust Authentication 20.3.2. Password Authentication 20.3.3. GSSAPI Authentication 20.3.4. SSPI Authentication 20.3.5. Ide...

PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)

24 minute read

背景 排序是比较常见的业务需求,为了降低排序的CPU开销,通常会使用索引来满足排序的需求。 但是并不是所有的QUERY都能使用索引排序,或者说使用索引排序就一定高效。 例如带过滤条件的QUERY,过滤完之后再根据某些字段或表达式排序。这种QUERY的排序不一定能用上索引。 当需要实时排序时,PostgreS...

PostgreSQL 9.6 内核优化之 聚合代码优化OP复用浅析

14 minute read

背景 聚合操作指将分组的数据聚合为一个结果输出。 聚合通常用在统计应用中,例如统计分组的最大值,最小值,记录数,平均值,方差,截距,相关性。 聚合也可能被用于文本分析或者图像分析等,例如最佳相似度,行列变换,聚合为数组或JSON,图像堆叠等。 因此聚合通常需要启动值,行的处理,以及结果的格式转换3个过程。 ...

PostgreSQL 9.6 平滑fsync, write原理浅析

7 minute read

背景 汽车换挡是否平顺,通常取决于档位数,或者换挡技术。 档位数越多,换挡时感觉会约平顺,档位数较少的情况下,换挡可能会有比较明显的顿挫感觉。 数据库也一样,有些时候可能就会出现卡顿的现象,比如尖锐(堆积)的IO需求时。 本文将给大家介绍9.6在fsync, write方面的平顺性改进,减少尖锐的IO需求。...