PostgreSQL 17 发布,改进了清理进程并提高了性能

图片

作者 | Renato Losio
译者 | 刘雅梦
策划 | 丁晓昀

PostgreSQL 全球开发小组最近宣布PostgreSQL 17 正式发布,PostgreSQL 17 是该流行开源数据库的最新版本。该版本侧重于性能改进,包括用于清理(Vacuum)的新内存管理实现、存储访问优化以及对高并发工作负载的增强。

虽然最新的 GA 版本对查询性能进行了总体改进,并为分区管理增加了更多的灵活性,但许多数据库管理员都强调了其对清理的更新,这些更新减少了内存使用,缩短了清理时间,并显示了清理索引的进度。清理(Vacuuming)是一种旨在回收不再需要的数据所占用的存储空间的操作。PostgreSQL 17 中更高效的 VACUUM 操作是由新的数据结构 TidStore 实现的,该结构在 VACUUM 操作期间存储元组 ID。该团队解释说:

PostgreSQL 的清理进程对于健康操作至关重要,需要服务器实例资源才能运行。PostgreSQL 17 为清理引入了一种新的内部内存结构,内存消耗减少了 20 倍。这提高了清理速度,也减少了共享资源的使用,为我们的工作负载提供了更多的可用资源。

PostgreSQL 17 引入了对逻辑复制的增强,通过消除删除逻辑复制槽的需要,简化了高可用性工作负载的管理和主要引擎版本的升级。最近的其他改进还包括增强了读取多个连续块的工作负载的 I/O 性能,改进了 EXPLAIN 支持,以及更好地处理 IS [NOT] NULL 条件。

虽然改进列表很长,但该版本可能缺少一个突出的新特性。CYBERTEC 的高级顾问和支持工程师 Laurenz Albe 写道:

这并不是因为 PostgreSQL 已经失去了发展势头:事实上,今天的贡献者比以往任何时候都多 (......) 多年来,许多聪明人做出了许多伟大的贡献。大多数简单、明显的改进(以及一些困难的改进!)已经完成了。剩下的缺失功能是真正困难的功能。

新版本支持 JSON_TABLE 选项,该选项允许同时处理 JSON 数据和常规 SQL 数据。与 MySQL 类似,JSON_TABLE() 是一个 SQL/JSON 函数,用于查询 JSON 数据并将结果显示为关系视图。

SELECT *FROM json_table(  '[ {"name": "Alice", "salary": 50000}, {"name": "Bob", "salary": 60000}   ]',  '$[*]'  COLUMNS ( name TEXT PATH '$.name', salary INT PATH '$.salary'  )) AS employee;

来源:谷歌博客

Percona 的技术布道者、《MySQL & JSON》一书的作者 Dave Stokes写道:

JSON_TABLE() 是 PostgreSQL 17 的一个重要新增功能。我们中那些处理大量 JSON 格式数据的人会大量使用它。

MotherDuck 的数据工程师兼开发人员倡导者 Mehdi Ouazza指出:

PostgreSQL 17 的最新版本悄无声息地淘汰了 NoSQL,也就是文档存储数据库。几年前,随着 Web 应用程序和 API 的爆炸式的增长(受益于 REST)以及 JSON 格式的使用,文档存储数据库很受欢迎。

MERGE 命令是另一个新增功能,它使开发人员能够在单个 SQL 语句中执行条件更新、插入或删除。这简化了数据操作,并通过减少查询次数来提高性能。在 Reddit 的一个热门帖子 中,用户 Goodie 评论道:

Postgres 成功地跨越了“每件事都只做一点点”的界限,并且不知何故,它总是站在做得很好的一边,这是极其罕见的。

云提供商已经开始支持该流行开源关系数据库的最新版本了。Amazon RDS 自去年 5 月以来一直 在预览环境中提供该版本,而谷歌云上的托管服务 Cloud SQL 最近也宣布 完全支持 PostgreSQL 17 的所有功能。

PostgreSQL 17 中的所有缺陷修复和改进都可以在 发布说明 中找到详细的说明。

作者介绍

Renato Losio 作为云架构师、技术主管和云服务专家拥有丰富的经验。目前,他住在柏林和的里雅斯特之间,作为首席云架构师远程工作。他的主要兴趣领域包括云服务和关系数据库。他是 InfoQ 的编辑,也是公认的 AWS 数据英雄。你可以在 LinkedIn 上与他联系。

https://www.infoq.com/news/2024/11/postgresql-17/

声明:本文由 InfoQ 翻译,未经许可禁止转载。