PostgreSQL是一款功能强大的开源数据库。今年9月,官方发布了PostgreSQL 17.0版本,在性能、逻辑复制、开发者体验、监控、权限&安全等多个方面进行了重要的改进和优化。阿里云RDS PostgreSQL已全面支持PostgreSQL 17.0版本。同时,RDS PostgreSQL在社区版17.0的基础上,在安全性、成本效益、可运维性等多个方面进行了增强,并新增了多种内核与插件特性,以满足用户特定业务场景的需求。
上线时间
2024年09月29日
功能简介
社区PostgreSQL 17的主要亮点
官方发布的PostgreSQL 17.0在性能、逻辑复制、开发者体验、监控、权限&安全等方面进行了改进和优化。
性能
VACUUM
使用了新的数据结构tid store(内部实现为radix tree)记录死元组,从而提升了VACUUM的效率并降低了内存消耗。
解除VACUUM 1GB内存使用上限。当清理包含索引的表时,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
可以输出优化器的内存消耗情况。
权限&安全
新增表级权限
MAINTAIN
,并保留了用户pg_maintain
,以便对表的VACUUM、REINDEX等操作进行权限控制。新增参数
sslnegotiation
,以实现直接执行TLS握手,从而消除了网络往返延迟。
开发者体验
更为完善的JSON支持。
新增函数
JSON_TABLE()
,该函数能够在SQL语句中将JSON数据转换为一个表。新增JSON构建函数
JSON()
、JSON_SCALAR()
和JSON_SERIALIZE()
。新增JSON查询函数
JSON_EXISTS()
、JSON_QUERY()
和JSON_VALUE()
。
提供函数
pg_column_toast_chunk_id()
用于获取指定TOAST的Chunk ID。
为什么选择使用RDS PostgreSQL 17
RDS PostgreSQL完全兼容社区版PostgreSQL,采用云原生架构,经过软硬件协调优化,为用户提供稳定可靠的高性价比数据库服务。同时,凭借丰富的插件扩展,RDS PostgreSQL能够支持各领域的场景化业务需求。
RDS PostgreSQL全面支持社区版PostgreSQL 17,自主研发的功能将持续兼容PostgreSQL 17。同时,RDS PostgreSQL还引入了多项自主研发的内核特性,以增强社区版本,满足用户在特定业务场景中的需求。
成本
(新功能)通用云盘数据归档
RDS PostgreSQL实例利用表空间和外部文件系统来实现对OSS的访问,允许用户通过DDL完成数据在ESSD和OSS之间的转换。开启RDS PostgreSQL数据归档功能后,利用OSS的海量、安全、低成本和高可靠特性,用户可以在RDS PostgreSQL上实现极低成本、无限容量的归档数据存储,并支持低频数据访问。相较于ESSD PL1云盘,数据存储成本下降了80%。详情请参见数据归档。
适用场景:实例中存在大量不常访问的数据。
表空间级别的透明页压缩TPC(Transparent Page Compression)
页压缩是指对Buffer Pool中的页执行实时的I/O压缩和解压缩,透明是指使用过程中无感知,数据在写入磁盘时自动压缩,数据在从磁盘读取时自动解压缩。透明页压缩的主要目标是减少存储空间的使用,并提高数据库的读性能。通过压缩数据,可以降低磁盘I/O,减少存储,提高缓存效率,并加快数据传输速度。
透明页压缩的优势:存储成本平均可节约50%,IO使用平均可节约50%,在读场景TPS会有提高,最高可提升100%。详情请参见透明页压缩TPC。
适用场景:实例数据量较大,业务场景以读取为主。
AP能力
(新功能)高性能OLAP引擎rds_duckdb
rds_duckdb在RDS PostgreSQL中引入了高效、资源友好的DuckDB,以增强分析型查询能力。该插件可以将RDS PostgreSQL中的本地表导出为列存表,并启用分析型查询加速(Analytical Processing Query Acceleration,简称AP)功能,显著提升了复杂查询的执行速度。启用该插件后,用户可以在RDS PostgreSQL上实现高效的分析查询,性能提升可高达几十倍。详情请参见AP加速引擎(rds_duckdb)。
适用场景:复杂分析型查询加速场景。
安全
表级别的透明数据加密(TDE)
所有加密解密操作均在内存中进行,内存中的数据是明文,磁盘中的数据是密文。这一措施有效防止了因磁盘被盗而导致的数据泄露问题,同时数据库的使用方式保持不变,无需额外的适配成本。更细粒度的加密能够在确保安全的前提下尽量降低因加密和解密所带来的性能损耗,并且支持开启默认加密选项。详情请参见透明数据加密TDE。
适用场景:需要对数据实施加密措施,或满足特定的安全合规要求。
运维
缓存淘汰功能
解决了多表场景下原生PostgreSQL长连接占用过多内存的问题。PostgreSQL中,后端进程每次访问一个表时,会将该表的元信息缓存到本地,并且这些缓存不会被主动释放,以减少后续对磁盘的访问。这导致长连接可能会积累大量缓存,从而引发内存溢出(OOM)。详情请参见缓存淘汰。
适用场景:具有大量长连接的SaaS场景。
SQL限流功能
通过限制并发SQL数,从而避免过高的数据库负载,保证数据库的稳定性和可靠性。详情请参见SQL限流(rds_ccl)。
适用场景:高并发访问,防止恶意攻击,控制资源使用等。
自研/第三方插件
除此之外,RDS PostgreSQL还支持多种自研、第三方插件,为用户提供丰富的扩展功能,详情请参见支持插件列表。例如:
pgvector向量插件(三方开源):能够存储向量类型数据,并实现向量相似度匹配,为AI产品提供底层数据支持。
Ganos时空引擎(自研):PostgreSQL Ganos时空引擎提供了一系列数据类型、函数和存储过程,使用户能够在阿里云RDS PostgreSQL中对空间/时空数据进行高效地存储、索引、查询和分析计算。
全密态数据库(自研):用户可对数据库表中的敏感数据列进行加密,这些列中的敏感数据将以密文形式进行传输、计算和存储。全密态数据库能够有效解决用户在不同应用场景下的数据安全问题,例如平台安全运维、敏感数据合规及多源数据融合等情况。
index_adviser索引推荐(自研):可以帮助用户确定应该对哪些列编制索引,以提高指定工作负载中的性能。能够协助用户识别应在哪些列上创建索引,以提升特定工作负载的性能。
oss_fdw读写外部数据文本文件(自研):支持将OSS中的数据加载到RDS PostgreSQL数据库中,也支持将RDS PostgreSQL数据库中的数据写入OSS。
pgbouncer轻量级连接池(三方开源):用于优化数据库连接的性能和资源利用率。当应用程序需要与PostgreSQL数据库建立连接时,它可以通过连接池复用现有的数据库连接,避免了频繁地创建和销毁连接产生的性能开销。这种连接复用可以显著减少数据库服务器的负载,提高应用程序的响应速度和并发性能。适用于短连接较多,频繁创建和销毁连接的场景。
pg_jieba中文分词插件(三方开源基础上加入自研功能):用于中文的全文搜索,支持自定义词库。
使用RDS PostgreSQL 17
升级原实例到RDS PostgreSQL 17
为助力用户顺利升级至17版本,RDS PostgreSQL提供了全面的大版本升级功能,主要包括蓝绿部署和本地升级两种模式。
蓝绿部署模式,既可以使用不割接的方式,在不影响原实例的情况下验证整个升级流程;同时,也可以采用割接的方式,在大版本升级期间实现无需停机,并在升级完成后自动交换原实例与新实例的连接地址,确保业务侧无感知。
本地升级方式,不会创建新版本实例,升级后继承原有的订单、实例名称、标签、参数配置、付费模式、云监控报警规则及备份规则等。
详情请参见升级数据库大版本。
全新创建RDS PostgreSQL 17实例
详情请参见创建RDS PostgreSQL实例。