PostgreSQL 15相比上一个版本,主要有14个参数发生了变化,下面简要进行介绍。
一、内存方面
hash_mem_multiplier参数默认值扩大一倍
当哈希操作占用的内存超过work_mem * hash_mem_multiplier的乘积之后,剩余的内存占用会溢出到磁盘。该参数在13和14里默认值是1,15里增大到2,允许哈希操作相比其它操作可以使用双倍的work_mem。
新增shared_memory_size参数
该参数记录由shared_preload_libraries配置的扩展插件使用的运行时内存。
新增shared_memory_size_in_huge_pages新增
显示huge_page_size使用且与shared_memory_size参数相关的大页内存。
二、日志方面
log_destination参数新增jsonlog选项
数据库日志支持json格式,详细使用可以参考文章:PostgreSQL 15新特性预览:json日志
log_checkpoints参数默认值变为了on
log_autovacuum_min_duration参数默认值变为了10min
新增log_startup_progress_interval参数
数据库启动恢复过程在一些场景可能较慢,例如系统需要花费一些时间去apply应用WAL,或者是花费较长时间重置unlogged对象,或者执行fsync同步数据到磁盘,但数据库日志并不能很好体现是哪个阶段,设置该参数当某个阶段耗时达到默认设置的10s后会更新某个阶段的状态信息。
三、统计信息方面
移除stats_temp_directory参数
PostgreSQL 15之前有一个统计信息收集进程通过本地UDP包收集更新统计信息,并存储在文件系统stats_temp_directory参数配置的目录里,并且所有的客户端会话可以从该目录读取统计信息。
PostgreSQL 15废弃了统计信息收集进程,记录到共享内存中,所以这个参数已经没有作用了。
新增stats_fetch_consistency参数
该参数针对一个transaction里多次访问累计的统计信息时,一致性读取可以有三个值:none、cache 、snapshot。
- none: 每次从共享内存重新获取,效率最高,适用场景为监控类软件使用的查询。
- cache: 首次访问后缓存,直到transaction结束或手工调用pg_stat_clear_snapshot()都不会重新获取,可以确保重复获取到相同的值,效率适中。
- snapshot: 首次访问后database级别缓存,直到transaction结束或手工调用pg_stat_clear_snapshot()都不会重新获取,可以确保当前数据库内都可获取到相同的值,开销最大。
该参数的默认值为cache,出于平衡的考虑。
四、流复制相关
wal_compression支持lz4和zstd压缩算法
wal_compression设置选项在PostgreSQL 15之前只能设置为off和on,设置为on时采用内置的pglz算法进行压缩,PostgreSQL 15除了设置off和on两个选项,增加了pglz、lz4和zstd三个选项值。
新增archive_library参数
该参数让归档操作增加了新的实现方式,可通过加载basic_archive模块来替代archive_command。相比archive_command使用shell命令来对每一个文件进行归档,如果产生大量的WAL,服务端需要等待本地shell命令的交互,它的优势会比较明显。
注意:使用archive_library参数后,archive_command不会生效。
新增recovery_prefetch参数
该参数在数据库recovery期间,对WAL的处理增加一个预读取的功能,可以降低IO等待时间。同时可以通过系统视图pg_stat_recovery_prefetch来进行观察。
新增wal_decode_buffer_size参数
如果打开了WAL预取参数,设置WAL解码的缓存大小。
五、递归查询的优化
新增recursive_worktable_factor参数
该参数允许用户在使用with做递归查询的工作负载中设置worktable的大小进行性能调整,可以预防死循环导致的问题。
保持联系
从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴加我微信进群吹牛唠嗑,交流技术。