PostgreSQL 被誉为最先进的开源数据库,具有强大的扩展性和灵活的架构。它的各种扩展、工具以及对高级数据类型的支持,使其成为了各类数据使用和应用开发中的热门选择。今年9月26日,社区官方正式发布 PostgreSQL 17.0 版本,在性能、逻辑复制、开发者体验、监控、权限&安全等方面进行了改进和优化。阿里云RDS PostgreSQL 版已支持 PostgreSQL 17.0,并在社区17.0基础上,进行了安全、成本、可运维性等多方面提升,增加多种内核特性及插件特性。详情可查阅阿里云数据库RDS PostgreSQL各大版本功能概览
社区 PG 17.0 有哪些亮点?
- 性能
- vacuum
- 使用了新的数据结构 tid store (内部实现为 radix tree) 记录死元组,提升了 vacuum 效率并降低内存消耗。
- 解除 vacuum 1G 内存使用上限:当清理包含索引的表时,vacuum 会将死元组记录在内存中,当内存受限时,会触发对索引文件的扫描。所以,增加 vacuum 的内存使用上限,可以减少对索引文件的扫描次数,以加快 vacuum 的速度并节约 IO 资源。
- WAL
- 优化了 WAL 锁的管理方式,提升高并发修改的性能。
- 优化器
- 可同时使用统计信息和 WITH 查询进一步优化。
- 当 IN 从句中可以使用 B 树索引时,可以大幅度加速查询
- 对于含有 NOT NULL 约束的字段,可以自动剔除冗余的 IS NOT NULL 语句。
- 逻辑复制
- 支持逻辑复制槽的故障转移功能。
- 从 PostgreSQL 17 升级到更高的大版本时,可以保留逻辑复制槽。
- 新增二进制工具
pg_createsubscriber
, 可以将两个物理复制的实例转化为逻辑复制。 - 提升在大量子事务场景下逻辑解码的性能
- 监控
- 新增视图 pg_stat_checkpointer,提供 checkpoint 的统计信息,可以更好地监控 checkpoint 的频率以及资源消耗
- 新增视图 pg_wait_events,提供了等待事件的原因。
EXPLAIN
可以打印优化器的内存消耗
- 权限&安全z
- 新增表级权限
MAINTAIN
,和保留用户pg_maintain
, 用于控制表的 VACUUM, REINDEX 等权限 - 增加新的参数
sslnegotiation
,可以直接执行 TLS 握手,消除了网络往返
- 开发者体验
- 更完善的 json 支持
- 新增函数
JSON_TABLE()
,可以在 SQL 语句中,将 json 数据转化成一个表 - 新增 JSON 构建函数
JSON()
,JSON_SCALAR()
以及JSON_SERIALIZE()
- 新增 JSON 查询函数
JSON_EXISTS()
,JSON_QUERY()
, andJSON_VALUE()
- 提供函数
pg_column_toast_chunk_id()
获取 TOAST 的 chunk id
为什么要使用阿里云 RDS PostgreSQL 17
阿里云RDS PostgreSQL 版 完全兼容开源PostgreSQL,基于云原生架构,软硬协同优化,提供稳定可靠、高性价比的数据库服务;并通过丰富的插件拓展,支撑各领域场景化业务。
RDS PostgreSQL现已全面支持社区PostgreSQL 17.0:其自研功能继续支持 PostgreSQL 17,多种自研内核特性对社区版17.0进行补强,满足用户特定业务场景的需求。
- 安全方面,RDS PostgreSQL提供:
表级别的透明数据加密(TDE)功能:所有加密解密操作均在内存中进行,内存中的数据是明文,磁盘中的数据是密文,避免因磁盘被盗而产生的数据泄露问题,同时数据库的使用方式保持不变,没有适配成本。
更细粒度的加密可以在保证安全的同时尽量降低因加密解密带来的性能损耗,同时也支持开启默认加密选项。在对数据进行加密,或有特殊安全合规要求的场景中,TDE能力尤为重要。
- 成本方面,RDS PostgreSQL 提供:
- 表空间级别的透明页压缩 TPC(Transparent Page Compression):页压缩指对Buffer Pool中的页执行实时的I/O压缩和解压缩,透明是指使用过程中无感知,数据在写入磁盘时自动压缩,数据在从磁盘读取时自动解压缩。
通过透明页压缩,用户可减少存储空间的使用,降低磁盘I/O,以此提高数据库读性能,提高缓存效率,加快数据传输速度。在实例数据量大,业务场景以读为主的场景,透明页压缩功能的优势 尤为明显。存储成本可平均可节约50%,IO使用平均可节约50%,读场景下的TPS最高可提升100%。
- 通用云盘数据归档(新功能):RDS PostgreSQL 实例利用表空间和外部文件系统来实现对OSS的访问,允许用户通过DDL完成数据在ESSD和OSS之间的转换。开启用RDS PostgreSQL数据归档功能后,利用OSS的海量、安全、低成本和高可靠特性,用户可在RDS PostgreSQL上实现极低成本、无限容量的归档数据存储,并支持低频数据访问。相较于ESSD PL1云盘,数据存储成本下降了80%。通用云盘数据归档能力适用于实例中有大量不常访问数据的场景。详见 通用云盘数据归档。
- 运维体验,RDS PostgreSQL 提供:
- 缓存淘汰功能:从根本上解决了多表场景下原生PostgreSQL长连接占用内存过多的问题。PostgreSQL中,后端进程每访问到一个表,会将该表的元信息缓存到本地,并且这些缓存不会被主动释放,以减少后续对磁盘的访问。这导致长连接可能会积累大量的缓存,并导致内存溢出(OOM)。该功能多用于具有大量长连接的SAAS场景。详见缓存淘汰
- SQL限流功能:通过限制并发SQL数,从而避免过高的数据库负载,保证数据库的稳定性和可靠性。多用于高并发访问,防止恶意攻击,控制资源使用等场景。详见SQL 限流功能
- AP 能力增强,RDS PostgreSQL 提供:
高性能OLAP引擎 rds_duckdb(新功能):新增rds_duckdb插件,引入了DuckDB提升RDS PostgreSQL的分析能力,允许用户将PostgreSQL本地表导出列存表副本,在开启AP加速开关后,对查询进行加速。启用插件后,您可以在RDS PostgreSQL上实现高效的分析查询,性能提升可高达几十倍。
除此之外,RDS PostgreSQL 还支持多种自研、第三方插件,为用户提供丰富的扩展功能,详见 支持插件列表。例如
- Ganos时空引擎(自研):PostgreSQL Ganos时空引擎提供一系列的数据类型、函数和存储过程,从而,用户可以在阿里云RDS PostgreSQL中对空间/时空数据进行高效的存储、索引、查询和分析计算。
- 全密态数据库(自研):用户可以对数据库表中的敏感数据列进行加密,这些列中的敏感数据将以密文进行传输、计算和存储。全密态数据库可以解决用户不同应用场景下的数据安全问题,如平台安全运维、敏感数据合规、多源数据融合等场景。
- index_adviser索引推荐(自研):索引推荐(index_adviser)可以帮助用户确定应该对哪些列编制索引,以提高指定工作负载中的性能。
- oss_fdw读写外部数据文本文件(自研):支持将OSS中的数据加载到RDS PostgreSQL数据库中,也支持将RDS PostgreSQL数据库中的数据写入OSS中。
- pgbouncer 轻量级连接池(三方开源):用于优化数据库连接的性能和资源利用率。当应用程序需要与PostgreSQL数据库建立连接时,它可以通过连接池复用现有的数据库连接,避免了频繁地创建和销毁连接产生的性能开销。这种连接复用可以显著减少数据库服务器的负载,提高应用程序的响应速度和并发性能。适用于短连接较多,频繁创建和销毁连接的场景。
- pg_jieba 中文分词插件(三方开源基础上加入自研功能):用于中文的全文搜索,支持自定义词库。
- pgvector 向量插件(三方开源):pgvector插件,能够存储向量类型数据,并实现向量相似度匹配,为AI产品提供底层数据支持。
如何升级到 RDS PostgreSQL 17
RDS PostgreSQL 提供了完善的大版本升级功能(详见 升级数据库大版本),包括蓝绿部署和本地升级两种模式。
- 蓝绿部署模式下,用户既可以使用不割接的方式,在不影响原实例的情况下,验证整个升级流程,又可以割接的方式,在大版本升级期间无需停机,并能在升级完成后,自动交换原实例与新实例的连接地址,做到业务侧无感。
- 本地升级方式下,用户可保证实例的参数配置和付费模式不变。