Postgres 18 Beta 1刚刚发布。与之前的主要版本一样,此 Beta 版本包含所有计划正式发布的功能的预览版。您可以阅读发行说明来了解完整的更新列表,但我们将在本文中重点介绍一些更新亮点。
Postgres 18 中的新功能
异步 I/O
Postgres 18 最令人兴奋的功能之一是引入了全新的异步 I/O 子系统。此前,Postgres 中的所有 I/O 都是同步的:每次读取都会阻塞查询执行,直到数据到达。而使用异步 I/O,Postgres 可以并行执行多个读取操作,并在等待结果的同时继续执行。这有助于减少 CPU 等待时间并提高吞吐量。
在 Postgres 18 中,您可以通过新的 io_method 设置选择三种 I/O 方法:
- 同步,保留旧的行为
- worker,使用后台 I/O 工作者(这是默认设置)
- io_uring,它绕过 I/O 工作者并使用与 Linux内核共享的环形缓冲区,以实现更低的开销(仅限 Linux)
早期基准测试显示,读取密集型查询的性能提升了 2-3 倍,尤其是在使用
io_uring 的情况下。新视图 pg_aios 可让您在使用异步方法时实时检查 I/O 操作。
主要版本升级的改进
这是 Postgres 18 中对运营团队的另一项重大变化:pg_upgrade 现在可以保留旧集群的规划器统计信息。在之前的版本中,升级意味着从零开始,因此在升级后运行完整的 ANALYZE 之前,查询计划通常不是最优的。
现在,除非使用 –no-statistics 禁用,否则 pg_upgrade 会复制关系和列级别的统计信息,以便规划器可以立即做出明智的决策。扩展统计信息目前尚未保留,但此更改有助于避免升级后立即出现性能下降。
两个新的 pg_upgrade 选项也将有助于减少大型环境中的停机时间:
–jobs 将允许并行执行升级检查。这不会影响数据复制阶段,但在对象较多的情况下,可以加快预检验证的速度。
–swap 会将升级模式更改为交换数据目录,而不是复制或链接它们。这可以避免创建重复项,但会就地修改源集群,这可能并不适合所有设置。
更详细的 EXPLAIN 输出
Postgres 18 还提供了非常实用的可观察性功能。EXPLAIN ANALYZE 包含新的运行时详细信息:
- 默认显示缓冲区和 I/O 使用情况
- 索引扫描节点现在报告执行了多少次索引查找
- 在 VERBOSE 模式下,您将看到 WAL 写入、CPU 时间和平均读取时间
真空和分析的新统计数据
继续改进可观察性,这里还有另一个实用功能:Postgres 18 中的 pg_stat_all_tables 现在会报告清理和分析每个表(包括自动运行)所花费的总时间。您将看到 total_vacuum_time、total_autovacuum_time 以及类似的列。
如果启用 track_cost_delay_timing,您还可以在 pg_stat_progress_vacuum、pg_stat_progress_analyze 和 autovacuum 日志中获得更精确的延迟记录。
UUIDv7 生成
此外,还新增了 uuidv7() 函数,用于生成可按时间戳排序的 UUID。这些函数对于有序插入或受益于时间顺序键的缓存层非常有用。为了清晰起见,Postgres 还添加了 uuidv4() 作为 gen_random_uuid() 的别名。
性能改进
Postgres 在每个主要版本中都获得了新的性能改进。此版本中的一些亮点包括:可并行化的 GIN 索引构建,有助于加快构建全文搜索、JSON 或数组索引的速度;B 树索引中新增的跳跃扫描支持;以及将 IN(VALUES) 和重复的 OR 过滤器转换为 ANY(array) 操作。
OAuth 支持
最后一点亮点:Postgres 18 还添加了新的 OAuth 身份验证方法。这允许客户端使用 OAuth 2.0 令牌进行身份验证,并通过插件接口进行验证。您可以像其他身份验证方法一样在 pg_hba.conf 中配置它,并使用新的 oauth_validator_libraries 设置加载令牌验证器。这为与身份提供者集成添加了一个可扩展选项。
#PG证书#PG考试#PostgreSQL培训#PostgreSQL考试#PostgreSQL认证