暂无图片
暂无图片
5
暂无图片
暂无图片
2
暂无图片

PostgreSQL 17新秀参数

原创 彭冲 2024-06-06
842

PostgreSQL 17截止到当前beta1版本,正式提交且未回退的新增参数共19个,本文将进行介绍。

一、SLRU缓存参数

有些维护类型的元数据,例如事务提交时间、子事务、组合事务、异步通知相关的信息,PostgreSQL会将其缓存在SLRU专用缓存中,以前它们是一个整体且不可配置。

在一些复杂的业务场景,尤其是有长事务以及子事务时,对SLRU的数据访问会引发性能问题, 版本13提供了一个统计信息视图pg_stat_slru来进行观测:

postgres=# select pg_stat_slru from pg_stat_slru; pg_stat_slru ------------------------------------------------------------------ (CommitTs,0,0,0,0,0,9,0,"2024-05-27 19:13:46.194269+08") (MultiXactMember,0,0,5,5,0,14,0,"2024-05-27 19:13:46.194269+08") (MultiXactOffset,0,5,5,5,5,14,0,"2024-05-27 19:13:46.194269+08") (Notify,0,0,0,0,0,0,0,"2024-05-27 19:13:46.194269+08") (Serial,0,0,0,0,0,0,0,"2024-05-27 19:13:46.194269+08") (Subtrans,5,0,0,4,0,9,8,"2024-05-27 19:13:46.194269+08") (Xact,0,419,8,5,0,9,0,"2024-05-27 19:13:46.194269+08") (other,0,0,0,0,0,0,0,"2024-05-27 19:13:46.194269+08") (8 rows)
复制

而新版本17里可以对这些SLRU缓存进行细化设置,当SLRU缓存使用较大时,允许进行单项配置调整来提高性能。

新增的7个SLRU参数名称及默认值如下:

  • commit_timestamp_buffers=256kB
  • multixact_member_buffers=256kB
  • multixact_offset_buffers=128kB
  • notify_buffers=128kB
  • serializable_buffers=256kB
  • subtransaction_buffers=256kB
  • transaction_buffers=256kB

同时新版本可以使用以下任意接口函数来重置SLRU统计信息:

  • pg_stat_reset_shared(‘slru’)
  • pg_stat_reset_slru()
  • pg_stat_reset_slru(NULL)

与此相关,另一个新增参数是max_notify_queue_pages,异步通知NOTIFY / LISTEN使用场景下允许对pg_notify子目录使用更大的段文件进行存储,当前默认值为8G。

二、增量备份参数

新版本提供了两个参数来支持增量备份功能而无需借助第三方备份工具(pg_probackup或pgbackrest等)

第一个参数是summarize_wal,控制是否开启walsummarizer进程来记录WAL摘要信息,设置为on之后,从操作系统能看到walsummarizer进程,使用如下SQL语句也能观测到该后台进程。

SELECT * FROM pg_stat_activity WHERE backend_type = 'walsummarizer';
复制

walsummarizer进程会将WAL的摘要信息写入$PGDATA/pg_wal/summaries目录下。

而第二个参数wal_summary_keep_time设置为非0的值时,根据时间周期自动清理WAL摘要信息文件,默认策略是自动删除10天前的文件。

postgres=# show wal_summary_keep_time; wal_summary_keep_time ----------------------- 10d (1 row)
复制

三、逻辑复制槽同步参数

17新版本终于迎来逻辑复制槽的故障转移自动切换功能,该功能主要由国人Hou Zhijie提交。

逻辑复制槽同步通过sync_replication_slots参数进行开关控制,设置为on时,standby节点将通过worker进程定期对主库进行ping操作并同步复制槽信息。当standby节点提升为主节点后,逻辑复制的订阅端修改连接为新主库的IP(如果使用VIP则无需修改)即可自动恢复。

另外同步逻辑复制槽还建议搭配standby_slot_names一起使用,设置standby_slot_names为主备物理复制槽的名称后,可建立逻辑复制槽的关联。此时主节点的logical walsender进程将确保变更传输并写入关联的物理复制槽节点后才发送给逻辑复制订阅端,这样可以预防订阅端超前消费。

设置standby_slot_names的弊端是,如果standby节点关闭,则主节点的逻辑复制会暂停。此时可以临时修改standby_slot_names参数,去掉设置再恢复逻辑复制。

四、SYSTEM权限设置参数

基于安全考虑,避免使用ALTER SYSTEM设置全局参数到postgresql.auto.conf文件而引起一些误解,新版本提供了allow_alter_system参数,默认值为on,保持之前的兼容性。

设置为off将不允许用户执行ALTER SYSTEM,从而避免参数设置存储到postgresql.auto.conf文件。

postgres=# SHOW allow_alter_system; allow_alter_system -------------------- off (1 row) postgres=# ALTER SYSTEM SET log_statement = 'all'; ERROR: ALTER SYSTEM is not allowed in this environment
复制

五、事务超时参数

新版本增加了事务超时的控制参数transaction_timeout,需要注意它也受另外两个超时参数最小值的影响。

  • transaction_timeout
  • statement_timeout
  • idle_in_transaction_session_timeout

transaction_timeout参数并不推荐在postgresql.conf文件里进行设置,而应在单个会话连接或客户端应用程序里设置来预防长事务。该参数只对用户连接里的事务有效,预备事务不受影响。

六、IO合并读取性能参数

新增的io_combine_limit参数可设置一次系统调用合并读取多个数据块,数据库内部读取函数ReadBuffer() 拆分为下面的两个函数:

  • StartReadBuffers()
  • WaitReadBuffers()

设计拆分后除了可通过一次系统调用读取多个数据块,还为将来版本预留优化接口。

七、事件触发器

新版本之前如果需要禁用事件触发器只能进入单用户维护模式。

新增的event_triggers参数默认值为on,设置为off允许临时禁用事件触发器。

关于事件触发器,17还增加了REINDEX操作以及Login登录事件。

八、大页内存状态显示参数

新版本增加了一个运行时查看大页内存状态是否已激活的参数huge_pages_status:

postgres=# SELECT * FROM pg_settings_get_flags('huge_pages_status'); pg_settings_get_flags ----------------------- {NOT_IN_SAMPLE} (1 row)
复制

该参数无需设置,数据库是否启用大页内存依赖于操作系统是否满足使用条件,当参数huge_pages设置为try时,如果满足大页内存的使用条件而数据库却未激活大页内存状态时会在log日志文件里输出警告信息。

九、优化器参数

新版本增加的enable_group_by_reordering参数,允许GROUP BY字段匹配ORDER BY排序字段,该参数内部标识为explain优化器参数。

postgres=# SELECT * FROM pg_settings_get_flags('enable_group_by_reordering'); pg_settings_get_flags ----------------------- {EXPLAIN} (1 row)
复制

十、开发调试参数

最后一个是新版本增加的开发调试参数trace_connection_negotiation,方便在libpq加密协议下调试SSLRequest或GSSENCRequest连接请求包的握手日志,需要搭配log_connections使用。

推荐阅读

与我联系

  • 微信公众号:象楚之行
  • 墨天轮:https://www.modb.pro/u/15675
  • 微信:skypkmoon

勤耕细作,用心积微;静待花开,量变质成。

最后修改时间:2024-07-23 08:24:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

李奇
暂无图片
8月前
评论
暂无图片 0
PostgreSQL 17截止到当前beta1版本,正式提交且未回退的新增参数共19个
8月前
暂无图片 点赞
评论
zy
暂无图片
9月前
评论
暂无图片 0
PostgreSQL 17截止到当前beta1版本,正式提交且未回退的新增参数共19个
9月前
暂无图片 点赞
评论
彭冲
暂无图片
关注
暂无图片
获得了821次点赞
暂无图片
内容获得194次评论
暂无图片
获得了844次收藏
TA的专栏
MogDB技术分享
收录164篇内容
PostgreSQL乐知乐享
收录177篇内容
目录
  • 一、SLRU缓存参数
  • 二、增量备份参数
  • 三、逻辑复制槽同步参数
  • 四、SYSTEM权限设置参数
  • 五、事务超时参数
  • 六、IO合并读取性能参数
  • 七、事件触发器
  • 八、大页内存状态显示参数
  • 九、优化器参数
  • 十、开发调试参数
  • 推荐阅读
  • 与我联系