选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 资源消耗

CONFIGURATION PARAMETER资源消耗 / 磁盘

max_notify_queue_pages

设置 LISTEN/NOTIFY 队列最多分配的页面数。

Sets the maximum number of allocated pages for NOTIFY / LISTEN queue.

整数 重启生效 引入 17 现存至 20 devel 0 次默认值变更

类型
整数integer
上下文
重启生效只能在服务器启动时设置,修改后需要重启
默认值
1048576
取值范围
64 – 2147483647
引入版本
17
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 2cdf131c46

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

1048576 17 – 20

默认值自 PostgreSQL 17 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.4 资源消耗 本站手册 官方原文

指定NOTIFY / LISTEN队列可分配页面的最大数量。 默认值是 1048576。对于 8 KB 页面,这允许最多消耗 8 GB 的磁盘空间。 此参数只能在服务器启动时设置。

机制详解

max_notify_queue_pages 限制磁盘后端 LISTEN/NOTIFY 队列最多分配的数据库页面数。按常见 8kB BLCKSZ,PG18 默认允许最多 8GB。

通知会保留到所有监听会话都已消费或不再需要。监听者长期停留在事务中会阻止清理并让队列增长。

它限制磁盘容量,不是 notify_buffers 内存,也不是单个 payload 上限。队列写满时,尝试 NOTIFY 的事务可能在提交阶段失败。其 postmaster 上下文在服务器启动时固定取值,修改后必须重启。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    提高容量前先监控 pg_notification_queue_usage(),并找出长期停留在事务中的 listener。应按可容忍通知积压与数据库卷可用空间规划磁盘队列,而不是按查询扫描吞吐。

  • OLAP分析与批处理

    OLAP 标签不能成为扩大队列的理由。监听会话中的长分析事务会延迟清理,因此应把 listener 与长事务分离,并测通知生产与消费速率。

  • 小规格低配实例与开发机

    除非应用有已验证的 LISTEN/NOTIFY 积压需求,否则保留默认。更多页面只会允许更多磁盘消耗并推迟失败,不能修复卡住的 listener。

常见问题

  • 通过扩大队列代替修复长期停留在事务中的 listener。
  • 把 max_notify_queue_pages 磁盘容量与 notify_buffers 共享内存缓存混淆。
  • 忘记按 8kB 页面计算时,默认 1048576 页允许约 8GB。
  • 认为更大队列会改变单个 NOTIFY payload 上限或投递语义。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 17 ← 16 新增此参数

    PostgreSQL 17 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
17 1048576 重启生效 整数 64 2147483647
18 1048576 重启生效 整数 64 2147483647
19 1048576 重启生效 整数 64 2147483647
20 沿用 1048576 重启生效 整数 64 2147483647

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Resource Usage 资源消耗 4 个
磁盘 4
file_copy_method 枚举 会话 copy
选择数据库文件的复制方法。 现存
file_extend_method 枚举 重载生效 posix_fallocate
选择扩展数据文件的方法。 现存
max_notify_queue_pages 整数 重启生效 1048576
设置 LISTEN/NOTIFY 队列最多分配的页面数。 现存
temp_file_limit 整数 会话(超级用户) -1 kB
限制每个 PostgreSQL 进程使用的全部临时文件总大小。 现存