集群参数默认值说明

调整数据库参数可用于优化性能、增强安全性或满足特定功能需求。PolarDB PostgreSQL版(兼容Oracle)在社区版的基础上对部分参数进行了预优化,以在云环境中提供良好的性能与稳定性。以下内容提供完整的参数参考和核心参数的配置建议,用于指导参数调优。

重要参数详解

PolarDB PostgreSQL版(兼容Oracle)参数默认值的设置,综合了性能、可用性以及可靠性方面的考虑,与社区版本默认值不一定相同。特别是以下参数,PolarDB根据最优性能原则进行了默认设定,您可以根据自己的需求在控制台自行修改。

参数

说明

polar_comp_stmt_level_tx

该参数用于控制异常是否回滚未提交的数据库更新。取值如下:

  • ON:异常不会自动回滚之前未提交的数据库更新,模拟Oracle行为。

  • OFF:异常将回滚未提交的数据库更新。

默认值:

  • Oracle语法兼容 2.0:ON。

  • Oracle语法兼容 1.0:OFF。

说明
  • 当前参数在Oracle语法兼容 2.0中已修改为polar_enable_stmt_transaction_rollback

  • Oracle中,当SQL命令中出现运行时错误时,将回滚该单个命令所引起的数据库上的所有更新。这称为语句级别事务隔离。例如,如果单个UPDATE命令成功更新五行,但尝试更新第六行时出现异常,则将回滚此UPDATE命令对所有六行进行的更新。之前尚未提交或回滚的SQL命令的效果将挂起,直到执行了COMMITROLLBACK命令。参数详细说明,请参见polar_comp_stmt_level_tx

  • 您可以通过SHOW命令查看当前数据库中该参数的设置情况。

wal_level

该参数用于决定将多少信息写入到WAL中。取值如下:

  • replica(默认):表示WAL中不包含逻辑解码所需的信息, 会降低WAL写入量,从而可以提升数据库写入性能。

  • logical:表示业务中涉及逻辑复制功能,即WAL中包含逻辑复制所需的信息,会增加WAL写入量。

说明
  • 修改该参数会导致数据库重启,请谨慎操作。

  • 您可以通过SHOW wal_level;命令查看当前数据库中该参数的设置情况。

log_statement

该参数用于设置审计日志的级别。默认为ddl,表示只有DDL对应的SQL才会进行审计,更少的日志打印可以提升数据库性能。取值如下:

  • none:不记录。

  • ddl(默认):记录CREATE/ALTER/DROPDDL语句。

  • mod:记录DDLDML(INSERT/UPDATE/DELETE)语句。

  • all:记录所有SQL语句。

说明
  • 在控制台上开启或关闭SQL洞察与审计功能会自动修改当前参数:

    • 开启审计日志会设置log_statement = all

    • 关闭审计日志会设置log_statement = ddl

  • 您可以通过SHOW log_statement;命令查看当前数据库中该参数的设置情况。

常见参数参考

说明

部分参数不支持在控制台上进行修改,您可以通过登录集群并使用命令行的方式进行查看与修改。

连接与认证

参数

说明

authentication_timeout

设置客户端完成身份认证的最长等待时间。如果客户端在此时间内未能完成认证,服务器将主动关闭连接,以防止有问题的客户端长时间占用连接资源。

  • 取值范围:1~600

  • 默认值:60

  • 单位:秒

ssl

控制实例是否启用并支持SSL加密连接。

  • 取值范围:ON/OFF

  • 默认值:OFF

自动清理 (Autovacuum)

自动清理(Autovacuum)进程负责回收死元组(已删除或已更新的数据行所占用的空间)并更新表的统计信息,对维持数据库性能至关重要。

参数

说明

autovacuum

控制是否启用自动清理(autovacuum)后台进程。为保证功能正常,参数track_counts也必须启用。

  • 取值范围:ON/OFF

  • 默认值:ON

说明

即使禁用此参数,当需要防止事务ID回卷时,系统仍会强制启动清理进程。

autovacuum_max_workers

指定可同时运行的自动清理工作进程(除自动清理启动器外)的最大数量。

  • 取值范围:1~262143

  • 默认值:5

  • 单位:进程数

autovacuum_naptime

指定自动清理进程在检查完一个数据库后,再次检查该数据库之前的最小休眠时间。在每一轮中后台进程检查数据库并根据需要为数据库中的表发出VACUUMANALYZE命令。

  • 取值范围:1~2147483

  • 默认值:30

  • 单位:秒

autovacuum_vacuum_threshold

触发VACUUM操作所需的最少变更(增、删、改)元组数。

  • 取值范围:0~2147483647

  • 默认值:50

  • 单位:元组数

autovacuum_vacuum_scale_factor

触发VACUUM操作时,表大小比例因子。实际阈值由autovacuum_vacuum_threshold和此因子共同决定,公式为:autovacuum_vacuum_threshold + (autovacuum_vacuum_scale_factor * 表的元组数)

  • 取值范围:0~100

  • 默认值:0.02

  • 单位:百分比

autovacuum_analyze_threshold

触发ANALYZE操作所需的最少变更(增、删、改)元组数。

  • 取值范围:0~2147483647

  • 默认值:50

  • 单位:元组数

autovacuum_analyze_scale_factor

触发ANALYZE操作时,表大小比例因子。实际阈值由autovacuum_analyze_threshold和此因子共同决定,公式为:autovacuum_analyze_threshold + (autovacuum_analyze_scale_factor * 表的元组数)。

  • 取值范围:0~2147483647

  • 默认值:0.05

  • 单位:百分比

autovacuum_freeze_max_age

在强制执行VACUUM以防止事务ID回卷前,表中最旧的事务ID可存在的最大年龄。系统会为阻止回卷而自动发起清理,不受autovacuum参数禁用的影响。

  • 取值范围:100000~2000000000

  • 默认值:500000000

  • 单位:事务ID

说明

即便自动清理被禁用,系统仍将发起自动清理进程来阻止回卷。

autovacuum_multixact_freeze_max_age

在强制执行VACUUM以防止多事务ID(multixact ID)回卷前,表中最旧的多事务ID可存在的最大年龄。

  • 取值范围:10000~2000000000

  • 默认值:700000000

  • 单位:事务ID

说明

即便自动清理被禁用,系统仍将发起自动清理进程来阻止回卷。

autovacuum_vacuum_cost_delay

用于自动VACUUM操作的代价延迟时间。如果设为-1,则沿用vacuum_cost_delay的值。

  • 取值范围:-1~100

  • 默认值:0

  • 单位:毫秒

autovacuum_vacuum_cost_limit

用于自动VACUUM操作的代价限制值。该总限制值将按比例分配给所有正在运行的自动清理工作进程(如果存在多个进程),因此每个工作进程的限制值之和将不会超过此变量中的值。如果设定为-1,则将沿用vacuum_cost_limit的值。

  • 取值范围:-1~10000

  • 默认值:10000

  • 单位:代价值

检查点与后台写入

参数

说明

checkpoint_timeout

设置自动WAL检查点之间的最长时间间隔。

  • 取值范围:30~86400

  • 默认值:30

  • 单位:秒

bgwriter_delay

后台写入进程(background writer)两轮刷脏页操作之间的休眠时间。

  • 取值范围:10~10000

  • 默认值:600000

  • 单位:毫秒

backend_flush_after

当后台进程写入的脏页数量超过此阈值后,操作系统会将文件缓存中的数据刷新到磁盘。

  • 取值范围:0~256

  • 默认值:0

  • 单位:Block

full_page_writes

控制在检查点(checkpoint)之后,当一个数据页首次被修改时,是否将整个页面的内容写入WAL日志。此功能用于防止因断电等故障导致的页面部分写入问题。

  • 取值范围:ON/OFF

  • 默认值:OFF

wal_buffers

用于在内存中暂存WAL数据的共享内存大小。

  • 取值范围:-1~262143(2097144 KB)

  • 默认值:16 MB

  • 单位:WAL Block(每块8 KB)

wal_level

控制写入WAL(预写式日志)的信息量级别。不同级别支持不同功能:replica提供只读服务的备库节点,logical提供逻辑复制服务。

  • 取值范围:replica/logical

  • 默认值:replica

wal_writer_delay

WAL写入进程(walwriter)在两轮WAL刷盘操作之间的最大休眠时间。

  • 取值范围:1~10000

  • 默认值:600000

  • 单位:毫秒

查询计划与执行

参数

说明

constraint_exclusion

控制查询优化器是否使用表约束(如CHECK约束)来优化查询,尤其适用于分区表的查询剪枝。

  • 取值范围:

    • on:对所有表检查约束

    • off:禁用

    • partition:仅对分区表和UNION ALL子查询生效

  • 默认值:partition

cpu_index_tuple_cost

设置规划器对一次索引扫描中处理每一个索引项的代价估计。

  • 取值范围:0~1.79769e+308

  • 默认值:0.005

cpu_operator_cost

设置规划器对于一次查询中处理每个操作符或函数的代价估计。

  • 取值范围:0~1.79769e+308

  • 默认值:0.0025

cpu_tuple_cost

设置规划器对一次查询中处理每一行的代价估计。

  • 取值范围:0~1.79769e+308

  • 默认值:0.01

enable_partition_pruning

控制查询优化器是否在计划阶段和执行阶段启用分区剪枝优化,以跳过对无关分区的扫描。

  • 取值范围:ON/OFF

  • 默认值:ON

seq_page_cost

设置规划器对一次顺序磁盘页面获取的代价估计。

  • 取值范围:0~1.79769e+308

  • 默认值:1

jit

控制是否为特定查询启用即时编译(Just-In-Time Compilation)以加速执行。

  • 取值范围:ON/OFF

  • 默认值:OFF

超时设置

参数

说明

deadlock_timeout

在检查到可能存在死锁之前,一个事务所等待锁的最长时间。

  • 取值范围:0~2147483647

  • 默认值:1000

  • 单位:毫秒

idle_in_transaction_session_timeout

事务处于空闲状态(idle in transaction)下的最长允许时间。超过此时间,会话将被终止。设置为0表示禁用此超时。

  • 取值范围:0~2147483647

  • 默认值:3600000

  • 单位:毫秒

lock_timeout

单个操作等待获取表、行或其他对象锁的最长时间。超过此时间,操作将报错退出。设置为0表示禁用此超时,将无限等待。

  • 取值范围:0~2147483647

  • 默认值:0

  • 单位:毫秒

statement_timeout

限制单条SQL语句执行的最长时间。超过此时间,该语句将被终止。设置为0表示无超时限制。

  • 取值范围:0~262143

  • 默认值:0

  • 单位:毫秒

日志与审计

参数

说明

logging_collector

控制是否启用日志收集进程,该进程负责捕获并写入集群运行期间的日志。

  • 取值范围:ON/OFF

  • 默认值:ON

log_connections

控制是否在日志中记录每一次成功的客户端连接。

  • 取值范围:ON/OFF

  • 默认值:OFF

log_disconnections

控制是否在日志中记录每一次客户端连接的断开。

  • 取值范围:ON/OFF

  • 默认值:OFF

log_error_verbosity

设置错误日志的详细程度。

  • 取值范围:

    • terse:仅包含严重性、主消息和位置

    • default:包含更多细节,如详细信息、提示等

    • verbose:所有详细日志

  • 默认值:default

log_min_duration_statement

记录执行时间超过指定阈值的慢SQL。设置为0将记录所有SQL语句,设置为-1表示禁用慢SQL日志功能。

  • 取值范围:0~2147483647

  • 默认值:5000

  • 单位:毫秒

log_statement

控制记录到日志中的SQL语句类型。

  • 取值范围:

    • none:不记录

    • ddl:记录CREATE/ALTER/DROPDDL语句

    • mod:记录DDLDML(INSERT/UPDATE/DELETE)语句

    • all:记录所有SQL语句

  • 默认值:ddl

复制与高可用

参数

说明

hot_standby

控制备节点(只读节点)是否可以接受只读查询。

  • 取值范围:ON/OFF

  • 默认值:ON

hot_standby_feedback

控制只读节点是否向主节点反馈其正在运行的查询信息。启用后,主节点会延迟清理那些只读节点查询仍在使用的旧数据行,以减少查询冲突。

  • 取值范围:ON/OFF

  • 默认值:ON

max_replication_slots

实例能够支持的最大复制槽数量。

  • 取值范围:0~262143

  • 默认值:64

资源管理

参数

说明

dynamic_shared_memory_type

指定动态共享内存的实现方式。

  • 取值范围:posix/sysv/mmap

  • 默认值:posix

gin_pending_list_limit

设置GIN索引在快速更新模式下,待处理列表(Pending List)的最大内存大小。

  • 取值范围:64~2097151

  • 默认值:4096

  • 单位:KB

huge_pages

控制实例是否尝试使用操作系统提供的大页内存。

  • 取值范围:ON/OFF

  • 默认值:ON

max_files_per_process

每个数据库后台进程允许同时打开的最大文件句柄数。

  • 取值范围:64~2147483647

  • 默认值:10000

max_locks_per_transaction

每个事务能够持有的最大锁数量。

  • 取值范围:10~2147483647

  • 默认值:64

max_prepared_transactions

集群中允许同时处于准备状态的(两阶段提交)事务的最大数量。

  • 取值范围:0~262143

  • 默认值:800

max_worker_processes

集群能够启动的后台工作进程的最大总数,包括并行查询工作进程等。

  • 取值范围:0~262143

  • 默认值:256

temp_file_limit

限制单个后台进程可使用的临时文件(用于排序、哈希等操作)的总大小。设置为-1表示不限制。

  • 取值范围:-1~2147483647

  • 默认值:104857600(100 GB)

  • 单位:KB

格式与行为

参数

说明

datestyle

设置日期和时间值的显示格式。

  • 取值范围:

    • 输出格式声明:ISO/Postgres/SQL/German

    • 输入/输出的年/月/日顺序:DMY/MDY/YMD

  • 默认值:'ISO,YMD'

default_with_oids

用于控制CREATE TABLE是否默认包含OID。

  • Oracle语法兼容 2.0:不再支持OID,只能为OFF。

  • Oracle语法兼容 1.0:取值范围ON/OFF,默认为ON。

extra_float_digits

控制浮点数显示时,在标准精度之外额外显示的有效位数。用于更精确地展示浮点数值。

  • 取值范围:-15~3

  • 默认值:0

fsync

控制数据库是否在关键操作(如COMMIT)后,强制将数据变更从操作系统缓存同步到物理磁盘。

  • 取值范围:ON/OFF

  • 默认值:ON

timezone

指定数据库会话用于显示和解释时间戳的时区。

  • 取值范围:标准时区名称,如Asia/ShanghaiUTC等。详细取值范围,请参考控制台参数的修改范围。

  • 默认值:'UTC'