↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

百科 / 配置参数 / 开发者选项

CONFIGURATION PARAMETER开发者选项

debug_parallel_query

允许出于测试目的使用并行查询,即使预计不会带来性能收益也是如此。

Forces the planner's use parallel query nodes.

枚举 会话 引入 16 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
会话任何用户都可在会话内用 SET 修改
默认值
off
枚举值
off, on, regress
引入版本
16
状态
现存

PostgreSQL 18.7 手册 官方文档 引入提交 5352ca22e0

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

off 16 – 19

已记录的默认值在 PostgreSQL 16–19 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18.7 手册 · 19.17 开发人员选项 本站手册 官方原文

允许出于测试目的使用并行查询,即使预计不会带来性能收益也是如此。debug_parallel_query 的允许值为 off(仅在预期会提高性能时使用并行模式),on(对所有被认为安全的查询强制使用并行查询),以及 regress(类似于 on,但有下文所述的额外行为变化)。

更具体地说,将该值设置为 on 会在任何看起来安全的查询计划顶部添加一个 Gather 节点,以便查询在并行工作进程中运行。即使并行工作进程不可用或无法使用,启动子事务等在并行查询上下文中被禁止的操作也将被禁止,除非规划器认为这样会导致查询失败。如果设置此选项时出现故障或意外结果,则可能需要将查询使用的一些函数标记为 PARALLEL UNSAFE(或可能是 PARALLEL RESTRICTED)。

将该值设置为 regress 会产生与设置为 on 相同的所有效果,并额外启用一些行为,以便进行自动回归测试。通常,来自并行工作进程的消息会包含一行上下文说明,但 regress 会抑制这一行,因此输出与非并行执行时相同。此外,由该设置添加到计划中的 Gather 节点会在 EXPLAIN 输出中被隐藏,以便输出与此设置为 off 时得到的结果一致。

机制详解

debug_parallel_query 即使预计没有性能收益,也会强制安全查询进入并行模式。on 会在安全时添加顶层 Gather;regress 还会隐藏测试专用输出差异。

并行安全限制仍然适用。强制上下文可暴露被错误标为 parallel safe 的函数;即便最终没有可用 worker,也可能禁止子事务等操作。

它在 PG16 取代旧名称 force_parallel_mode,用于回归测试,不是让生产查询变快或绕过所有并行成本决策。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。

调优建议

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

  • OLTP在线事务处理

    不要用 debug_parallel_query 调优生产 OLTP。只在有负责人、日志/磁盘预算、回滚条件与取证计划的限时复现中启用,完成后立即恢复默认。

  • OLAP分析与批处理

    长分析任务会放大 debug_parallel_query 的调试开销与生成物。应优先使用标准 EXPLAIN 与统计,并把开发实验与普通用户隔离。

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

    让 debug_parallel_query 保持上游默认。小主机没有足够 CPU、磁盘、连接与日志余量承担开发插桩,更不适合长时间开启。

常见问题

  • 限时诊断或恢复任务结束后仍让 debug_parallel_query 保持启用。
  • 在生产数据的唯一副本上进行实验。
  • 低估日志、core、临时文件、WAL、CPU 或连接名额放大。
  • 把服务器能启动或查询能完成误当作数据与行为正确的证明。

演化历史

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

  1. PostgreSQL 16 ← 15 新增此参数

    PostgreSQL 16 起可用

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
16 off — 会话 枚举 — — off, on, regress
17 off — 会话 枚举 — — off, on, regress
18 off — 会话 枚举 — — off, on, regress
19 off — 会话 枚举 — — off, on, regress
20 — — — 枚举 — — —

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Developer Options 开发者选项 40 个 ↗
composite_type_mismatch 枚举 会话(超级用户) error —
设置如何处理复合类型数据的版本不匹配。 现存
allow_in_place_tablespaces 布尔 会话(超级用户) off —
当向 CREATE TABLESPACE 命令提供空的位置字符串时,允许将表空间创建为 pg_tblspc 内的目录。 现存
allow_system_table_mods 布尔 会话(超级用户) off 131 次
允许修改系统表的结构以及对系统表进行某些其他风险操作。 现存
backtrace_functions 字符串 会话(超级用户) 空字符串 —
这个参数包含一个以逗号分隔的 C 函数名称列表。 现存
debug_copy_parse_plan_trees 布尔 — —
启用该选项会强制所有解析树和计划树都经过 copyObject() 处理,以便更容易发现 copyObject() 中的错误和遗漏。 现存
debug_deadlocks 布尔 — —
如果设置,当死锁超时发生时,转储所有当前锁的信息。 现存
debug_discard_caches 整数 会话(超级用户) 0 —
当设置为 1 时,每个系统目录缓存条目都会在最早可能的时刻被置为无效,无论是否真的发生了使其失效的事件。 现存
debug_io_direct 字符串 重启生效 空字符串 —
要求内核使用 O_DIRECT(大多数类 Unix 系统)、F_NOCACHE(macOS)或 FILE_FLAG_NO_BUFFERING(Windows),尽量减小关系数据和 WAL 文件缓存的影响。 现存
debug_logical_replication_streaming 枚举 会话 buffered —
允许值为 buffered 和 immediate。 现存
debug_parallel_query 枚举 会话 off —
允许出于测试目的使用并行查询,即使预计不会带来性能收益也是如此。 现存
debug_raw_expression_coverage_test 布尔 — —
启用该选项会强制所有 DML 语句的原始解析树都经过 raw_expression_tree_walker() 扫描,以便更容易发现该函数中的错误和遗漏。 现存
debug_shared_buffers 整数 — —
缓冲区空闲列表报告之间的秒数。 于 8.1 移除
debug_write_read_parse_plan_trees 布尔 — —
启用该选项会强制所有解析树和计划树都经过 outfuncs.c/readfuncs.c 处理,以便更容易发现这些模块中的错误和遗漏。 现存
force_parallel_mode 枚举 会话 off —
允许为测试目的使用并行查询,即使预期不会带来性能收益。 于 16 移除
ignore_checksum_failure 布尔 会话(超级用户) off —
只有启用数据校验和时才有效。 现存
ignore_invalid_pages 布尔 重启生效 off —
如果设置为 off(默认值),则在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别错误,中止恢复。 现存
ignore_system_indexes 布尔 连接时 off —
读取系统表时忽略系统索引(但是修改系统表时依然同时更新索引)。 现存
jit_debugging_support 布尔 连接时(超级用户) off —
如果 LLVM 具有所需的功能,则向 GDB 注册生成的函数。 现存
jit_dump_bitcode 布尔 会话(超级用户) off —
将生成的 LLVM IR 写入文件系统,位于 data_directory 内。 现存
jit_expressions 布尔 会话 on —
当 JIT 编译被激活时(见第 30.2 节),确定表达式是否用 JIT 编译。 现存
jit_profiling_support 布尔 连接时(超级用户) off —
如果 LLVM 具有所需的功能,则输出让 perf 对 JIT 生成的函数进行性能分析所需的数据。 现存
jit_tuple_deforming 布尔 会话 on —
当 JIT 编译被激活时(见第 30.2 节),确定元组拆解是否被 JIT 编译。 现存
log_btree_build_stats 布尔 — —
如果设置,会记录 B-树操作上的系统资源使用情况统计(内存和 CPU)。 现存
post_auth_delay 整数 连接时 0 s —
新服务器进程启动并完成认证过程之后的延迟时间。 现存
pre_auth_delay 整数 重载生效 0 s —
新服务器进程刚刚派生之后、执行认证过程之前的延迟时间。 现存
remove_temp_files_after_crash 布尔 重载生效 on —
当设置为 on(默认值)时,PostgreSQL 将在后端崩溃后自动删除临时文件。 现存
send_abort_for_crash 布尔 重载生效 off —
默认情况下,后端崩溃后,postmaster 会向其余子进程发送 SIGQUIT 信号使其停止,这样它们可以较为平稳地退出。 现存
send_abort_for_kill 布尔 重载生效 off —
默认情况下,在尝试用 SIGQUIT 停止子进程之后,postmaster 会等待五秒,然后发送 SIGKILL 强制立即终止。 现存
trace_connection_negotiation 布尔 重启生效 off —
记录认证开始前连接握手过程的详细信息。 现存
trace_lock_oidmin 整数 — 8.41 次
如果设置,不会跟踪 OID 小于此值的表上的锁(用于避免在系统表上的输出)。 现存
trace_lock_table 整数 — 8.41 次
无条件地跟踪此表(OID)上的锁。 现存
trace_locks 布尔 — —
如果开启,发出锁使用情况的信息。 现存
trace_lwlocks 布尔 — —
如果开启,发出轻量级锁的使用信息。 现存
trace_notify 布尔 会话 off —
为 LISTEN 和 NOTIFY 命令生成大量调试输出。 现存
trace_recovery_messages 枚举 重载生效 log —
启用原本不会记录的恢复相关调试输出。 于 17 移除
trace_sort 布尔 会话 off —
如果开启,输出排序操作中的资源使用信息。 现存
trace_userlocks 布尔 — —
如果开启,发出关于用户锁使用的信息。 现存
wal_consistency_checking 字符串 会话(超级用户) 空字符串 —
这个参数被设计用来检查 WAL 重做例程中的缺陷。 现存
wal_debug 布尔 — 8.01 次
如果被打开,WAL 相关的调试输出将被发出。 现存
zero_damaged_pages 布尔 会话(超级用户) off —
检测到损坏的页面头通常会导致 PostgreSQL 报告错误,中止当前事务。 现存