即将发布的PostgreSQL13值得期待

PostgreSQL 13不是我们往年(分区!逻辑复制!并行!Upsert!JSON!等)发布的“这是FEATURE版本”,而是对许多现有版本进行了改进基于真实PostgreSQL经验的功能。实际上,我将PostgreSQL 13称为“每个人的东西”发行版:通过升级到PostgreSQL 13,您很有可能会立即从中受益。

今天的话题是:即将发布的PostgreSQL 13版本。

对数字13的担心足以促使人们就即将到来的版本号进行讨论,考虑到很多因素(包括相对较新的数字方案更改),社区选择了维持现状。

但是,这篇文章的目的不是深入探讨数字十三背后的心理,而是探究为什么Postgres 13是一种特殊的,即使不是很幸运的发行版。

与我去年写的类似,PostgreSQL 13不是我们往年(分区!逻辑复制!并行!Upsert!JSON!等)发布的“这是FEATURE版本”,而是对许多现有版本进行了改进基于真实PostgreSQL经验的功能。实际上,我将PostgreSQL 13称为“每个人的东西”发行版:通过升级到PostgreSQL 13,您很有可能会立即从中受益。

因此,尽管我鼓励您查看Postgres 13发行说明(在撰写本文时仍是草案),但让我讨论一些使该发行版非常幸运的功能!

索引较小

B树索引是PostgreSQL中最常用的索引:它是您在运行“ CREATE INDEX”命令时创建的索引的类型。一般而言,较小的B树索引是一件好事:它们占用磁盘上的空间较少,并且通常可以更快地进行搜索。这两个属性都具有性能和成本节省的好处。

PostgreSQL 13的显着特征之一是B树索引的增强,它可以更有效地存储重复项。换句话说,如果您的B树索引包含重复值,则可以利用Postgres 13中的此功能使索引占用更少的磁盘空间!

让我们看看它是如何工作的。让我们使用以下SQL创建一个有些人为的数据集:

我在Postgres 12和13实例中都运行了该SQL。 我可以使用以下查询获取索引的大小:

结果如下:

这很整洁:PostgreSQL 13中的索引肯定较小! 性能如何?

我会这样说:查询性能和基准测试是一个非常深入的主题,因此我将尝试给出一些指导性的指导。 我在两个实例上都运行了以下查询,并求出了平均时间:

定向上,查询在Postgres 13上的运行速度提高了2倍,尽管我会警告您YMMV(您的里程可能会有所不同)。

如果要从早期版本的PostgreSQL升级,则必须在现有的B树索引上运行REINDEX才能利用重复数据删除功能...但是,PostgreSQL 12引入了REINDEX,因此您不必遭受宕机的打击!

更快速更好的VACUUM

...或者我想。我们的公寓很小,我从来没有尝试过并行进行VACUUM过程,但是从理论上讲,更多的VACUUM会有所帮助。

好消息是PostgreSQL确实有自己的VACUUM,而这是PostgreSQL维护中必不可少的部分。VACUUM是PostgreSQL的并发并发控制系统的一部分,简而言之,清理不再可见的行,例如因为它们已被更新或删除。另外,使用autovacuum。

随着数据集变得越来越大,清理工作需要花费更长的时间才能完成,这可能远非理想。但是,在PostgreSQL 13中,运气对您微笑,因为它引入了并行清理索引的功能。

默认情况下,此新功能在PostgreSQL 13中有效:在表上运行VACUUM时,将并行处理所有索引。如果需要,还可以指定PARALLEL指令来控制要在索引上运行的并行VACUUM作业的数量。

有好处吗?您可以更快地清理数据库,确保可以维护健康的Postgres系统!

排序更少,排序更快

在算法类中,通常从性能的角度来看排序的痛苦。如果您已经对数据进行了排序,并且以后需要将其用作其他排序的一部分,则对数据进行预排序会有所帮助!

输入增量排序。

在Postgres 13中,可以使用查询中较早的顺序对数据进行排序,以加快查询的较后部分的速度。这可以应用于许多常见查询,例如对多列进行排序。让我们通过示例来看一下。

使用上表,首先确保我们已将索引放置在“ y”列上,并且已运行了分析:

让我们在Postgres 12和Postgres 13上运行以下查询:

在Postgres 12上,您可能会看到类似以下的输出:

而在Postgres 13上:

再次说明,执行时间是定向的,我们可以看到在不同PostgreSQL版本上的查询之间有相当大的加速。 Postgres 13中新的增量排序功能使您可以在索引的第一部分中利用索引,从而提高了性能。

PostgreSQL 13中的增量排序是那些功能之一,如果您碰巧运行上述查询,则仅通过升级就可以帮助提高数据工作负载的性能。

适合所有人的东西

PostgreSQL 13中有很多很多功能,以至于这篇博客文章最终变成了巨著。我知道的一些亮点可能适用于我过去管理的工作负载(并且没有特定的顺序):

  • PostgreSQL中通过CREATE STATISTICS提供的高级查询计划程序统计信息可以帮助使用“ IN / ANY”操作以及“ OR”子句的计划。我肯定在前世中经常使用这些功能,为此功能感到非常兴奋!
  • 分区的许多改进,包括跨分区表的联接的查询性能,对逻辑复制的完全支持以及对行级操作的“ BEFORE”触发器的添加。
  • 哈希聚合与聚合函数和分组集一起使用,可以用于更多数量的查询:如果哈希聚合太大而无法全部容纳到内存中,则它将溢出到磁盘上。性能更高,查询更多!
  • 现在,在执行SCRAM身份验证时,使用libpq的连接驱动程序可以要求通道绑定。哦,将您的密码升级到SCRAM。
  • 许多功能上的便利:JSON路径查询语言中现在有一个“ datetime”功能,并且“ gen_random_uuid”现在可以使用而无需扩展!
  • 用于连接到远程Postgres数据库的PostgreSQL外部数据包装器postgres_fdw现在支持证书身份验证。

还有很多。我确实鼓励您查看发行说明。

准时发布(似乎!)

到目前为止,PostgreSQL 13的发布时间表已按时进行。看来Postgres 13将在第三季度末的预计时间全面上市。鉴于今年PostgreSQL全球开发小组中的许多人面临着前所未有的挑战,更不用说每个人了,社区团结起来以帮助确保PostgreSQL 13如期发行是令人惊讶的。

使我确信Postgres 13非常特别的原因:在这非常规时期,PostgreSQL社区再次证明了其产生可靠数据库系统的能力,该数据库系统将继续构建数据驱动的应用程序甚至更加容易。

因此,有机会请升级到Postgres 13!

参考

原文地址:https://info.crunchydata.com/blog/why-postgresql-13-is-a-lucky-release