好吧,那就是每年这时候我们再次看看PostgreSQL的最新版本。

作为传统规定,在Percona,团队给出的列表特性来写。雷竞技下载官网我碰巧是一个非常基本的,我可能会增加,重要的功能即选择不同。

在进入细节之前,我想提一些说明如何的结果导出博客:

  1. 相当小的表和一个简单的架构。
  2. 因为这演示了在一个相对低功率系统,真正的指标有可能显著大于所证明。

PostgreSQL选择不同的条款是什么?

对于那些新postgres, ANSI SQL标准,选择不同的语句可以消除重复的行从结果集匹配指定的表达式。从每组(PostgreSQL的保持一个条目行重复。)

例如,得到下表:

这个SQL语句返回这些记录过滤中的惟一值列“c1”顺序:

注意,所显示的列c2, c1独特性返回第一个表中找到的值:

这个SQL语句返回这些记录过滤中惟一的值列“c2”

当然,最后返回独特性为整个行:

所以这是什么特别的新增强的独特的你问?答案是,这是并行!

在过去,只有一个CPU /过程被用来计算不同记录的数量。然而,postgres版15一个现在可以分解计算的任务并行运行多个数量的工人每个CPU分配给一个单独的进程。有许多运行时参数控制这种行为,但我们关注的是max_parallel_workers_per_gather

PostgreSQL的条款例子:生成指标

让我们产生一些指标!

为了证明这种改进的性能三个表被创建的时候,没有索引,填充大约5000000条记录。注意每个表的列数即一、5和10个分别为:

下一步是将上述数据转储复制到以下版本的postgres:

postgres的二进制文件被编译从源和数据集群上创建相同的低功率硬件使用默认,不调谐的,运行时配置值。

一旦填充,bash脚本执行后生成的结果:

这里是结果:一个可以看到表变得越大所能达到的性能收益就越大。

PG版本

1列(t1),女士

5列(t5),女士

10列(t10),女士

pg96

3382年

9743年

20026年

pg10

2004年

5746年

13241年

pg11

1932年

6062年

14295年

pg12

1876年

5832年

13214年

pg13

1973年

2358年

3135年

pg14

1948年

2316年

2909年

pg15

1439年

1025年

1245年

查询计划

更有趣的一个方面的调查审核postgres的不同版本之间的查询计划。例如,单个列不同的查询计划是很相似,当然,无视上级执行时间之间的postgres分别9.6和15计划。

真正的不同出现不同的列的数量增加时,如表t10演示了通过查询。可以看到并行在行动!

提高了性能

性能增强是由更新postgres运行时参数max_parallel_workers_per_gather。在集群新初始化默认值是2。下面的表格显示,它很快成为收益递减的问题由于测试硬件本身的限制功能。

POSTGRES版本15

max_parallel_workers_per_gather

1列(t1)

5列(t5)

10列(t10)

2

1439年

1025年

1245年

3

1464年

875年

1013年

4

1391年

858年

977年

6

1401年

846年

1045年

8

1428年

856年

993年

PostgreSQL截然不同

对索引

性能改进是<强大的>不意识到当索引查询计划中说明的应用。

PG15、表T10(10个不同的列)max_parallel_workers_per_gather = 4:

最后的想法

运行不同的多个cpu性能是一个大的进步。但记住的风险减少性能当你增加的数量max_parallel_workers_per_gather和你接近你的硬件的限制。调查显示,在正常情况下,查询计划可能决定使用索引,而不是平行的工人。为了解决这个问题的方法之一是考虑禁用等运行时参数enable_indexonlyscanenable_indexscan。最后,别忘了运行解释分析,以理解发生了什么。

得到Pe雷竞技下载官网rcona支持PostgreSQL

雷竞技下载官网Percona支持PostgreSQL数据库的dba和开发人员寻求帮助。

雷竞技下载官网Percona支持PostgreSQL

额外的Percona支雷竞技下载官网持和资源包括:

雷竞技下载官网Percona分布PostgreSQL软件

雷竞技下载官网Percona平台

雷竞技下载官网Percona管理服务

雷竞技下载官网Percona专业服务

订阅
通知的
客人

6评论
最古老的
最新的 大多数投票
内联反馈
查看所有评论
奥利弗

好,谢谢你。

我看到查询溢出到磁盘上,从查询计划:

合并排序方法:外部磁盘:68432 kb

这将是有趣的计时结果如果机器配置了足够的内存和/或合适的work_mem等参数,以便不会发生,这将提供一个更有代表性的使用。否则磁盘活动沼泽几乎所有其他因素。

rbernier01

嗨,这是一个很好的点!

我总是第二猜测自己我应该执行多少调优每当我做一个调查。随着时间的流逝,我意识到只要方法和假设是那么希望足够记录信息,它可以使用至少一个起点满足读者的需求。

希望这有助于

rbernier01

这是一个很好的观点。我认为只要有足够的信息允许其复制然后人们可以希望takie他们阅读作为起点为他们自己的调查。

彼得克

你写“这个SQL语句返回这些记录过滤中的惟一值列“c1”顺序:选择不同的(c1) * t_ex;”。
SQL标准是开放的,如果不同的返回数据排序或随机因为这我实现的依赖。Oracle使用返回值从“独特”和“集团”排序,但从版本9。x这不是真的不再因为他们开始使用一个散列并行函数之后,这个值是排序。
官方声明如果你需要排序的数据使用一个“命令”。

法马吉德

值得一提的是,在选择不同的规模没有人使用,而是快速近似像HyperLogLog CitusData postgresql-hll的实现方法:

https://github.com/citusdata/postgresql-hll

rbernier01

不幸的是,不是太多人知道HyperLogLog即使它已经存在多年。