下列参数旨在用于开发人员测试,切勿在生产数据库上使用。然而,其中一些参数可用于协助恢复严重损坏的数据库。因此,这些参数已被排除在示例 postgresql.conf
文件之外。请注意,其中许多参数都需要特殊的源编译标志才能正常工作。
allow_in_place_tablespaces
(布尔值
) #当向 CREATE TABLESPACE
命令提供空位置字符串时,允许将表空间创建为目录,该目录位于 pg_tblspc
中。目的是允许测试主要和备用服务器在同一台机器上运行的复制方案。这种目录可能会混淆备份工具,而备份工具预期只在此位置找到符号链接。只有超级用户和具有适当 SET
权限的用户才能更改此设置。
allow_system_table_mods
(布尔值
) #允许修改系统表的结构以及对系统表执行某些其他风险操作。即使是超级用户,在其他情况下,也不允许这样做。不建议使用此设置,因为它会导致无法恢复的数据丢失或严重损坏数据库系统。只有超级用户和具有适当 SET
权限的用户才能更改此设置。
backtrace_functions
(字符串
) #此参数包含 C 函数名称的逗号分隔列表。如果出现错误,并且出现错误的内部 C 函数的名称与列表中的值相匹配,那么将回溯写入服务器日志并连同错误消息一起写入。这可用于调试源代码的特定区域。
并非所有平台都支持回溯,回溯的质量取决于编译选项。
只有超级用户和具有适当 SET
权限的用户才能更改此设置。
debug_discard_caches
(整数
) #设置为 1
时,会在第一次可能的时机使每个系统目录缓存条目失效,无论是否真的发生了会使该条目失效的任何事情。因此,系统目录的缓存功能实际上被禁用,所以服务器会运行得非常慢。较高的值会递归地运行缓存失效,这会更慢,并且只用于测试缓存逻辑本身。默认值 0
会选择正常的目录缓存行为。
当尝试触发难以重现涉及并发表改动的错误时,此参数可能十分有用,但在其他情况下几乎不需要。有关详细信息,请参阅源码文件 inval.c
和 pg_config_manual.h
。
如果编译时定义了 DISCARD_CACHES_ENABLED
(使用 configure 选项 --enable-cassert
时自动发生),则支持此参数。在生产版本中,其值将始终为 0
,并且尝试将其设置到其他值会引发错误。
debug_io_direct
(string
) #要求内核使用 O_DIRECT
(大多数类似 Unix 的系统)、F_NOCACHE
(macOS)或 FILE_FLAG_NO_BUFFERING
(Windows)来最大程度降低关系数据和 WAL 文件的缓存效果。
可以将其设置为一个空字符串(默认值)以禁用直接 I/O,或一个逗号分隔的操作列表,该列表中的操作应使用直接 I/O。有效的选项包括 data
(用于主数据文件)、wal
(用于 WAL 文件)以及 wal_init
(在最初分配时用于 WAL 文件)。
一些操作系统和文件系统不支持直接 I/O,因此在启动时非默认设置可能会被拒绝或导致错误。
当前,此功能会降低性能,并且仅适用于开发人员测试。
debug_parallel_query
(enum
) #允许使用并行查询进行测试,即使在预期没有性能提升的情况下也是如此。允许的 debug_parallel_query
值包括 off
(仅当预期平行模式能够提升性能时使用该模式)、on
(对所有认为安全的查询强制使用并行查询)和 regress
(类似于 on
,但带有如下所述的其他行为更改)。
更具体地说,将此值设置为 on
将向似乎安全的任何查询计划的顶部添加一个 Gather
节点,以便查询在并行工作程序内运行。即使并行工作程序不可用或无法使用,也仍然会禁止在并行查询上下文中禁止的操作(例如启动子事务),除非规划器认为这会导致查询失败。如果在设置此选项时发生故障或意外结果,则查询使用的某些函数可能需要标记为 PARALLEL UNSAFE
(或者可能是 PARALLEL RESTRICTED
)。
将此值设置为 regress
具有与将其设置为 on
完全相同的效果,另加上一些意在促进自动回归测试的其他效果。通常,来自并行工作程序的消息包括指示此类情况的上下文行,但设置为 regress
会取消此行,以便输出与非并行执行中的输出相同。此外,此设置添加到计划中的 Gather
节点会隐藏在 EXPLAIN
输出中,以便输出与关闭此设置后获得的输出相匹配。
ignore_system_indexes
(boolean
) #在读取系统表时忽略系统索引(但在修改表时仍更新索引)。当从损坏的系统索引中恢复时,这很有用。该参数在会话开始后无法更改。
post_auth_delay
(integer
) #新服务器进程在执行认证过程后启动时的延迟时间。这旨在为开发人员提供利用调试程序附加到服务器进程的机会。如果未指定单位,则此值将作为秒来计算。值为零(默认值)将禁用延迟。该参数在会话开始后无法更改。
pre_auth_delay
(integer
) #新服务器进程分叉后,在执行认证过程前延迟的时间量。此项设置旨在让开发者有机会将服务器进程连接到调试器,以找出认证中的错误行为。如果此值在未指定单位的情况下指定,则它被视为秒为单位。值零(默认值)将禁用延迟。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
trace_notify
(boolean
) #为 LISTEN
和 NOTIFY
命令生成大量的调试输出。 client_min_messages 或 log_min_messages 必须分别低于或等于 DEBUG1
才能将此输出发送到客户端或服务器日志。
trace_sort
(boolean
) #如果打开,则在排序操作期间发出有关资源使用的信息。仅当在编译 PostgreSQL 时定义了 TRACE_SORT
宏时,此参数才可用。(然而,TRACE_SORT
目前默认定义)。
trace_locks
(boolean
) #如果打开,则发出有关锁使用的信息。转储信息包括锁操作的类型、锁的类型和正在锁定或解锁的对象的唯一标识符。还包括已对此对象授予的锁类型的位掩码,以及等待在此对象上使用的锁的类型。对于每种锁类型,还会转储已授予锁和等待锁的数量以及总数。下面显示了日志文件输出的示例
LOG: LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1) grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0 wait(0) type(AccessShareLock) LOG: GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1) grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1 wait(0) type(AccessShareLock) LOG: UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1) grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0 wait(0) type(AccessShareLock) LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1) grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0 wait(0) type(INVALID)
可以在 src/include/storage/lock.h
中找到正在转储的结构的详细信息。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
trace_lwlocks
(boolean
) #如果启用,发出有关轻量级锁使用的信息。轻量级锁主要用于提供对共享内存数据结构的互斥访问。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
trace_userlocks
(布尔值
) #如果启用,发出有关用户锁使用的信息。对于建议锁,输出与 trace_locks
相同。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
trace_lock_oidmin
(整数
) #如果设置,请勿追踪此 OID 下方的表锁(用于避免针对系统表输出)。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
trace_lock_table
(整数
) #无条件地追踪此表(OID)上的锁。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
debug_deadlocks
(布尔值
) #如果设置,当死锁超时发生时,转储所有当前锁的信息。
仅当在编译 PostgreSQL 时定义了 LOCK_DEBUG
宏时,此参数才可用。
log_btree_build_stats
(布尔值
) #如果设置,在各种 B 树操作上记录系统资源使用情况统计信息(内存和 CPU)。
该参数仅在编译 PostgreSQL 时定义 BTREE_BUILD_STATS
宏时可用。
wal_consistency_checking
(字符串
) #此参数旨在用于检查 WAL 重做例程中的错误。启用后,任何与 WAL 记录一起修改的缓冲区的全页映像将添加到记录中。如果随后重播记录,系统将首先应用每条记录,然后测试记录修改的缓冲区是否与存储的映像匹配。在某些情况下(如提示位),允许轻微变化,并且将被忽略。任何意外差异都将导致致命错误,终止恢复。
此设置的默认值为空字符串,禁用此功能。可以将其设置为 all
检查所有记录,或将其设置为资源管理器逗号分隔的列表来仅检查源自这些资源管理器的记录。当前,受支持的资源管理器为 heap
、heap2
、btree
、hash
、gin
、gist
、sequence
、spgist
、brin
和 generic
。扩展可以定义其他资源管理器。只有超级用户和拥有相应 SET
权限的用户可以更改此设置。
wal_debug
(boolean
) #如果为开,则发送与 WAL 相关的调试输出。该参数仅在编译 PostgreSQL 时定义 WAL_DEBUG
宏时可用。
ignore_checksum_failure
(boolean
) #只有在 数据校验和 启用时才有效果。
在读取时检测到校验和失败时,通常会导致 PostgreSQL 报告错误,并中止当前事务。将 ignore_checksum_failure
设置为开,将导致系统忽略错误(但仍会报告警告),并继续处理。此行为可能会 导致崩溃、传播或隐藏损坏,或其他严重问题。但是,它可以让您越过错误并检索可能仍存在于表中且尚未损坏的行(如果块头仍完好)。如果头文件损坏,则即使启用此选项,也会报告错误。默认设置为 off
。只有超级用户和具有适当 SET
权限的用户才能更改此设置。
zero_damaged_pages
(boolean
) #检测到已损坏的页头时,通常会导致 PostgreSQL 报告错误,并中止当前事务。将 zero_damaged_pages
设置为开,将导致系统改为报告警告,将损坏的页置零,并继续处理。此行为 将摧毁数据,即已损坏页上的所有行。但是,它确实允许您越过错误并从可能存在于表中的任何未损坏的页中检索行。如果由于硬件或软件错误而发生损坏,它对于恢复数据很有用。在放弃从表中已损坏的页中恢复数据的希望之前,通常不要设置此项。尚未置零的页不会强制写入磁盘,因此建议在再次关闭此参数之前重新创建表或索引。默认设置为 off
。只有超级用户和具有适当 SET
权限的用户才能更改此设置。
ignore_invalid_pages
(boolean
) #如果设置为 off
(默认值),在恢复期间检测到对无效页的引用 PostgreSQL 会导致引发 PANIC 级别错误,中止恢复。将 ignore_invalid_pages
设置为 on
会导致系统忽略 WAL 记录中的无效页面引用(但仍会报告警告),并继续恢复。该行为可能会 导致崩溃、数据丢失、传播或隐藏损坏,或其他严重问题。但是,它可能会让您越过 PANIC 级别错误,完成恢复,并导致服务器启动。参数只能在服务器启动时设置。它仅在恢复期间或在备用模式下有效。
jit_debugging_support
(布尔值
) #如果 LLVM 具有所需的功能,请使用 GDB 注册生成的功能。这样可以更轻松地进行调试。默认设置为 off
。此参数只能在服务器启动时设置。
jit_dump_bitcode
(布尔值
) #将生成的 LLVM IR 写入文件系统,具体在 data_directory 内。这仅对处理 JIT 实现的内部有用。默认设置为 off
。只有超级用户和具有相应 SET
权限的用户才能更改此设置。
jit_expressions
(布尔值
) #确定何时 JIT 编译已被激活(请参见 章节 30.2)时是否 JIT 编译表达式。默认值为 on
。
jit_profiling_support
(布尔值
) #如果 LLVM 具有所需的功能,请发出允许 perf 对 JIT 生成的函数进行分析所需的数据。这会将文件写入 ~/.debug/jit/
;用户负责在需要时执行清理。默认设置为 off
。此参数只能在服务器启动时设置。
jit_tuple_deforming
(boolean
) #确定是否 JIT 编译元组变形,当 JIT 编译激活时(参见 30.2 节)。默认值为 on
。
remove_temp_files_after_crash
(boolean
) #将其设置为 on
(默认值)时,PostgreSQL 将在后端崩溃后自动删除临时文件。如果禁用了,将保留文件,例如可以用于调试。然而,重复崩溃可能会导致无用文件累积。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
send_abort_for_crash
(boolean
) #默认情况下,后端崩溃后,主进程将通过向它们发送 SIGQUIT 信号来停止其余子进程,这样它们可以以更加优雅的方式退出。当此选项设置为 on
时,而是发送 SIGABRT。这通常会为每个此类子进程生成一个核心转储文件。对于在崩溃后调查其他进程的状态,这可能很方便。在重复崩溃的情况下,它也可能占用大量磁盘空间,因此在您未仔细监视的系统上不要启用此项。请注意,不存在用于自动清理核心文件(s) 的支持。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
send_abort_for_kill
(boolean
) #默认情况下,在尝试使用 SIGQUIT 停止子进程后,主进程将等待五秒钟,然后发送 SIGKILL 以强制立即终止。当此选项设置为 on
时,而是发送 SIGABRT,而不是 SIGKILL。这通常会为每个此类子进程生成一个核心转储文件。对于调查 “卡住的” 子进程的状态,这可能很方便。在重复崩溃的情况下,它也可能占用大量磁盘空间,因此在您未仔细监视的系统上不要启用此项。请注意,不存在用于自动清理核心文件(s) 的支持。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
debug_logical_replication_streaming
(枚举
) #允许的值包括 buffered
和 immediate
。默认值为 buffered
。此参数旨在用于测试大交易的逻辑解码和复制。debug_logical_replication_streaming
的影响对发布者和订阅者不同
在发布者端,debug_logical_replication_streaming
允许在逻辑解码中立即流化或序列化更改。如果设置为 immediate
,如果启用了 streaming
选项 CREATE SUBSCRIPTION
,则流化每个更改,否则序列化每个更改。如果设置为 buffered
,则在达到 logical_decoding_work_mem
时,解码将流化或序列化更改。
在订阅者端,如果将 streaming
选项设置为 parallel
,则可使用 debug_logical_replication_streaming
指示领导者应用工作人员将更改发送到共享内存队列,或将所有更改序列化到文件。如果设置为 buffered
,则领导者通过共享内存队列将更改发送到并行应用工作人员。如果设置为 immediate
,则领导者将会所有更改序列化到文件,并在交易结束时通知并行应用工作人员读取和应用它们。