PostgreSQL 17(简称PG17)是一款功能强大且不断进化的开源关系数据库管理系统,它在前几个版本的基础上进行了大量的优化和新增功能,旨在提升系统的整体性能和易用性。
性能优化
Vacuum进程改进:
- 采用了新的数据结构,显著减少了内存使用量,最高可减少20倍。
- 不再受1GB内存限制,通过maintenance_work_mem变量进行配置,提升了灵活性。
- 改进了IN子句和B-tree索引的处理,缩短了查询执行时间。
流式I/O接口:
- 引入了流式I/O接口,提升了顺序扫描和ANALYZE命令的性能。
并行构建BRIN索引:
- 支持BRIN(Block Range INdex)索引的并行构建,提高了索引构建速度。
WAL锁管理优化:
- 改进了预写日志(WAL)锁的管理,提高了高并发写入场景下的性能,部分测试显示性能提升了2倍。
SIMD指令支持:
- 增加了更多显式的SIMD指令,如AVX-512,为bit_count等函数提供了硬件加速支持。
功能增强
分区管理:
- 增强了分区管理功能,支持分区的拆分与合并,以及分区表使用身份列和排他约束。
逻辑复制:
- 为逻辑复制添加了新功能,简化了高可用架构和升级流程。
- 允许逻辑复制的订阅者使用hash索引进行查找,并引入了pg_createsubscriber命令行工具。
- 升级到更高版本时无需删除复制槽,避免了数据再同步操作。
SQL/JSON支持:
- 深化了SQL/JSON标准支持,新增了JSON_TABLE功能,支持将JSON转换为标准PostgreSQL表。
- 增加了SQL/JSON构造函数(JSON、JSON_SCALAR、JSON_SERIALIZE)和查询函数(JSON_EXISTS、JSON_QUERY、JSON_VALUE)。
- 为jsonpath实现增添了更多功能,包括将JSON值转换为不同数据类型。
MERGE命令增强:
- 支持RETURNING子句,允许返回被MERGE命令修改的行。
- 新增了merge_action函数,用于查看MERGE命令执行的具体操作(INSERT、UPDATE、DELETE)。
- 支持使用MERGE命令更新视图,并新增了WHEN NOT MATCHED BY SOURCE子句。
COPY命令改进:
- 导出大数据行时的性能最高可提升2倍。
- 当源端编码和目标编码相同时,COPY性能亦有所提升。
- 新增了ON_ERROR选项,允许在插入错误时继续处理其他数据。
安全性与可维护性
排序规则提供程序:
- 引入了内置的排序规则提供程序,提供与C排序规则类似的排序语义,但使用UTF-8编码,确保排序结果跨系统一致。
连接参数与认证:
- 新增了sslnegotiation连接参数,允许在使用ALPN时直接进行TLS握手,减少网络往返。
- 引入了事件触发器,可以在认证时触发。
- libpq中新增了PQchangePassword API,允许客户端自动对密码进行哈希处理,提升安全性。
预定义角色与维护操作:
- 新增了预定义角色pg_maintain,赋予用户执行多种维护权限,并确保search_path在执行维护操作时的安全性。
- 允许使用ALTER SYSTEM设置系统无法识别的未定义配置参数。
备份与恢复:
- 支持pg_basebackup进行增量备份。
- 引入了pg_combinebackup实用工具,用于备份恢复过程中将备份合并。
- pg_dump新增了--filter参数,允许指定导出过程中要包含或排除的对象。
其他改进
EXPLAIN命令增强:
- 增加了SERIALIZE和MEMORY选项,分别展示数据序列化耗时和优化器内存使用情况。
- 显示I/O读写耗时,提供更详细的查询性能分析。
视图与统计信息:
- 引入了pg_wait_events视图,提供关于等待事件的描述,便于深入了解活动会话的等待原因。
- 规范了pg_stat_statements中CALL命令的参数,减少了频繁调用的存储过程记录数。
- VACUUM进度报告现在会显示索引垃圾回收的进度。