Recent Posts

PostgreSQL Heap Only Tuple - HOT (降低UPDATE引入的索引写IO放大)

30 minute read

背景 PostgreSQL目前默认的存储引擎在更新记录时,会在堆内产生一条新版本,旧版本在不需要使用后VACUUM回收,回收旧版本前,需要先回收所有关联这个版本的所有索引POINT。 PG的索引的KEY为索引字段或表达式的值,VALUE为行号。 8.3以前,每个TUPLE版本(行号)都有对应的索引POINT,...

PostgreSQL 内存表可选项 - unlogged table

10 minute read

背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。 https://postgrespro.com/docs/enterprise/10/in-memory 《PostgreSQ...

PostgreSQL undo多版本存储引擎 zheap测试

5 minute read

背景 undo 存储引擎,由于大量使用inplace update,所以大幅度降低了表膨胀的概率。并且减少了垃圾回收引入的IO。 预计会在PG 12的版本中release。 目前可以下源码进行测试。 部署zheap引擎 1、源码使用 https://github.com/EnterpriseDB/zhea...

PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试

29 minute read

背景 TPCC, TPCB是工业标准的OLTP类型业务的数据库测试,包含大量的读、写、更新、删除操作。 7*24小时强压耐久测试,主要看数据库在长时间最大压力下的 性能、稳定性、可靠性。 测试CASE : 1、1000万 tpcc 2、1亿 tpcb 测试时长7天。 测试环境 与如下测试同一台ECS虚...

PostgreSQL pgbench tpcb 海量数据库测试 - 分区表测试优化

3 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 当我们使用tpcb测试CASE时,如果生成的数据量过于...

PostgreSQL pgbench tpcb 数据生成与SQL部分源码解读

4 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 本文为pgbench 内置tpcb的解读。 源码 s...

PostgreSQL pageinspect 诊断与优化GIN (倒排) 索引合并延迟导致的查询性能下降问题

2 minute read

背景 GIN索引为PostgreSQL数据库多值类型的倒排索引,一条记录可能涉及到多个GIN索引中的KEY,所以如果写入时实时合并索引,会导致IO急剧增加,写入RT必然增加。为了提高写入吞吐,PG允许用户开启GIN索引的延迟合并技术,开启后,数据会先写入pending list,并不是直接写入索引页,当pendi...