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

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

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

CONFIGURATION PARAMETER开发者选项

ignore_invalid_pages

如果设置为 off(默认值),则在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别错误,中止恢复。

Continues recovery after an invalid pages failure.

布尔 重启生效 引入 13 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
重启生效只能在服务器启动时设置,修改后需要重启
默认值
off
引入版本
13
状态
现存

PostgreSQL 18.7 手册 官方文档 引入提交 41c184bc64

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

off 13 – 19

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

手册说明

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

如果设置为 off(默认值),则在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别错误,中止恢复。将 ignore_invalid_pages 设置为 on 会导致系统忽略 WAL 记录中的无效页面引用(但仍报告警告),并继续恢复。此行为可能会导致崩溃、数据丢失、传播或隐藏损坏,或其他严重问题。但是,它可能允许你跳过 PANIC 级错误,完成恢复,并启动服务器。参数只能在服务器启动时设置。它仅在恢复期间或备库模式下生效。

机制详解

恢复期间,WAL 引用无效页面通常会触发 PANIC 并停止恢复;ignore_invalid_pages 改为记录警告并跳过该引用继续。

这是仅启动时设置,只在恢复或备库模式有效。跳过 redo 会丢数据、传播损坏,并可能让结构内部不一致,即使服务器最终能启动。

它是在保全证据并用尽正确恢复路径后的紧急抢救机制。通过它启动的服务器不能视为健康,也不能直接提升投入正常服务。其 postmaster 上下文在服务器启动时固定取值,修改后必须重启。

调优建议

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

  • OLTP在线事务处理

    绝不能把 ignore_invalid_pages 当作调优或常态可用性设置。应停止写入、保全不可变副本、用尽备份/存储修复、记录预期数据损失、窄范围抢救、重建并验证后才可恢复服务。

  • OLAP分析与批处理

    只读分析也不会让 ignore_invalid_pages 安全:损坏页面仍会污染结果或结构。只能在可丢弃抢救副本上使用,并明确接受数据丢失。

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

    不能因为没有副本就直接启用 ignore_invalid_pages。先保全原件并寻找干净备份;该开关可能把可见损坏变成静默丢失。

常见问题

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

演化历史

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

  1. PostgreSQL 17 ← 16 仅描述更新

    补充说明 Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode. Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting "ignore_invalid_pages" to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode.

  2. PostgreSQL 13 ← 12 新增此参数

    PostgreSQL 13 起可用

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
13 off — 重启生效 布尔 — — —
14 off — 重启生效 布尔 — — —
15 off — 重启生效 布尔 — — —
16 off — 重启生效 布尔 — — —
17 off — 重启生效 布尔 — — —
18 off — 重启生效 布尔 — — —
19 off — 重启生效 布尔 — — —
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 报告错误,中止当前事务。 现存