Skip to content

PostgreSQL 核心参数列表

内存相关参数

内存参数是影响PostgreSQL性能的关键配置,合理分配内存资源可以显著提高数据库性能。

参数名称默认值取值范围说明推荐配置
shared_buffers128MB128kB ~ 物理内存共享缓冲区大小,用于缓存数据块物理内存的25%,但不超过16GB
work_mem4MB64kB ~ 2TB每个排序/哈希操作可用的内存对于OLTP系统:16MB-64MB;对于OLAP系统:128MB-512MB
maintenance_work_mem64MB1MB ~ 2TB维护操作(VACUUM、CREATE INDEX等)可用的内存物理内存的10%,但不超过1GB
effective_cache_size4GB128kB ~ 物理内存PostgreSQL优化器假设的可用缓存大小物理内存的75%
temp_buffers8MB800kB ~ 物理内存临时表可用的内存8MB-64MB
wal_buffers64kB32kB ~ 物理内存WAL缓冲区大小对于高写入负载:16MB-64MB;默认值通常足够

连接相关参数

连接参数控制PostgreSQL可以接受的并发连接数和连接行为。

参数名称默认值取值范围说明推荐配置
max_connections1001 ~ 262143最大并发连接数对于OLTP系统:根据服务器资源调整,通常200-500;使用连接池时可设为较大值
superuser_reserved_connections30 ~ max_connections-1为超级用户保留的连接数3-5
listen_addresseslocalhost主机名或IP地址列表监听的网络地址生产环境建议指定具体IP,而非*
port54321 ~ 65535监听端口保持默认或根据安全策略修改
tcp_keepalives_idle72000 ~ INT_MAXTCP连接空闲时间(秒)600-1800
tcp_keepalives_interval750 ~ INT_MAXTCP keepalive探测间隔(秒)60-120
tcp_keepalives_count90 ~ INT_MAXTCP keepalive探测失败次数3-5

WAL相关参数

WAL(Write-Ahead Log)参数控制事务日志的生成和写入行为,影响数据安全性和写入性能。

参数名称默认值取值范围说明推荐配置
wal_levelreplicaminimal, replica, logicalWAL日志级别对于复制:replica;对于逻辑复制:logical
fsynconon, off是否强制WAL写入磁盘生产环境必须设为on
synchronous_commitonon, local, remote_write, remote_apply, off同步提交级别对于高可用性:on;对于高性能:local或remote_write
wal_sync_methodfsync取决于操作系统WAL同步方法保持默认,或根据操作系统调整
checkpoint_timeout5min30s ~ 1d检查点间隔时间15min-30min
max_wal_size1GB2MB ~ 1TB触发检查点的WAL大小阈值对于高写入负载:8GB-32GB
min_wal_size80MB2MB ~ max_wal_size检查点后保留的最小WAL大小对于高写入负载:1GB-4GB
wal_compressionoffon, off, pglz是否压缩WAL记录对于存储受限环境:on

检查点相关参数

检查点参数控制检查点的行为,影响数据库恢复时间和写入性能。

参数名称默认值取值范围说明推荐配置
checkpoint_completion_target0.90.0 ~ 1.0检查点完成目标比例0.7-0.9
checkpoint_flush_after256kB0 ~ 2TB检查点写入多少数据后强制刷新对于SSD:1MB-4MB;对于HDD:128kB-256kB
checkpoint_warning30s0 ~ INT_MAX检查点耗时超过此值时发出警告30s-60s

优化器相关参数

优化器参数控制查询优化器的行为,影响查询计划的生成。

参数名称默认值取值范围说明推荐配置
random_page_cost4.00.1 ~ 100.0随机读取一页的成本对于SSD:1.1-1.5;对于HDD:3.0-4.0
seq_page_cost1.00.1 ~ 100.0顺序读取一页的成本保持默认
effective_io_concurrency11 ~ 1000有效I/O并发度对于SSD:200-500;对于HDD:2-8
default_statistics_target1001 ~ 10000统计信息采样目标对于复杂查询:200-500
constraint_exclusionpartitionon, off, partition是否启用约束排除对于分区表:partition或on
enable_seqscanonon, off是否启用顺序扫描保持默认
enable_indexscanonon, off是否启用索引扫描保持默认
enable_bitmapscanonon, off是否启用位图扫描保持默认

自动维护相关参数

自动维护参数控制自动VACUUM和自动ANALYZE的行为。

参数名称默认值取值范围说明推荐配置
autovacuumonon, off是否启用自动VACUUM生产环境必须设为on
autovacuum_max_workers31 ~ 100自动VACUUM最大工作线程数4-8
autovacuum_naptime1min1s ~ 1h自动VACUUM检查间隔30s-1min
autovacuum_vacuum_threshold501 ~ INT_MAX触发自动VACUUM的最小修改行数50-100
autovacuum_vacuum_scale_factor0.20.0 ~ 1.0触发自动VACUUM的比例因子对于频繁更新的表:0.05-0.1
autovacuum_analyze_threshold501 ~ INT_MAX触发自动ANALYZE的最小修改行数50-100
autovacuum_analyze_scale_factor0.10.0 ~ 1.0触发自动ANALYZE的比例因子0.05-0.1

日志相关参数

日志参数控制PostgreSQL的日志行为,影响问题排查和性能监控。

参数名称默认值取值范围说明推荐配置
log_destinationstderrstderr, csvlog, syslog, eventlog日志输出目标根据系统环境调整
logging_collectoroffon, off是否启用日志收集器生产环境建议设为on
log_directorylog目录路径日志文件存储目录保持默认或根据系统规范调整
log_filenamepostgresql-%Y-%m-%d_%H%M%S.log文件名模式日志文件名格式保持默认
log_rotation_age1d0 ~ 1440min日志文件轮转时间1d-7d
log_rotation_size00 ~ 10GB日志文件轮转大小100MB-1GB
log_min_duration_statement-1-1 ~ INT_MAX记录执行时间超过此值的SQL对于性能监控:100ms-1s
log_statementnonenone, ddl, mod, all记录的SQL语句类型对于安全审计:ddl或mod
log_error_verbositydefaultterse, default, verbose错误日志详细程度default或verbose
log_lock_waitsoffon, off是否记录锁等待对于并发问题排查:on
log_checkpointsoffon, off是否记录检查点信息对于性能监控:on

安全相关参数

安全参数控制PostgreSQL的安全行为,保护数据库免受攻击。

参数名称默认值取值范围说明推荐配置
listen_addresseslocalhost主机名或IP地址列表监听的网络地址生产环境建议指定具体IP,而非*
max_connections1001 ~ 262143最大并发连接数根据服务器资源调整
password_encryptionscram-sha-256md5, scram-sha-256密码加密算法scram-sha-256
ssloffon, off是否启用SSL连接生产环境建议设为on
ssl_cert_fileserver.crt文件路径SSL证书文件保持默认或根据系统规范调整
ssl_key_fileserver.key文件路径SSL私钥文件保持默认或根据系统规范调整
ssl_ca_file文件路径SSL CA证书文件生产环境建议配置
authentication_timeout1min1s ~ 600s认证超时时间30s-1min
tcp_keepalives_idle72000 ~ INT_MAXTCP连接空闲时间600-1800

其他重要参数

参数名称默认值取值范围说明推荐配置
max_parallel_workers_per_gather20 ~ 1024每个Gather节点的最大并行工作线程数对于多核CPU:2-4
max_parallel_workers80 ~ 1024系统最大并行工作线程数CPU核心数的一半
max_worker_processes88 ~ 262143系统最大后台工作线程数CPU核心数
dynamic_shared_memory_typeposixposix, sysv, windows, mmap动态共享内存类型保持默认
max_files_per_process100010 ~ 1000000每个进程打开的最大文件数4096-8192
cluster_name字符串集群名称根据系统规范调整

常见问题(FAQ)

Q1:如何快速查看PostgreSQL的当前参数配置?

A1:可以使用以下命令查看所有参数或特定参数的当前配置:

sql
-- 查看所有参数
SHOW ALL;

-- 查看特定参数
SHOW shared_buffers;

-- 使用pg_settings视图查询参数,支持更灵活的筛选和排序
SELECT name, setting, unit, short_desc FROM pg_settings WHERE name LIKE '%memory%';

Q2:修改参数后如何使其生效?

A2:参数生效方式取决于参数类型:

  • 动态参数:修改后立即生效,无需重启
  • 静态参数:需要重启PostgreSQL服务才能生效

可以通过查询pg_settings的vartype字段判断参数类型:

sql
SELECT name, vartype, context FROM pg_settings WHERE name = 'shared_buffers';

Q3:如何永久保存参数修改?

A3:有两种方式可以永久保存参数修改:

  1. 使用ALTER SYSTEM命令:修改postgresql.auto.conf文件,永久生效

    sql
    ALTER SYSTEM SET shared_buffers = '4GB';
  2. 直接编辑postgresql.conf文件:需要重启服务才能生效

Q4:如何根据服务器硬件配置调整参数?

A4:一般建议:

  • 对于8GB内存的服务器:shared_buffers = 2GB, effective_cache_size = 6GB
  • 对于16GB内存的服务器:shared_buffers = 4GB, effective_cache_size = 12GB
  • 对于32GB内存的服务器:shared_buffers = 8GB, effective_cache_size = 24GB
  • 对于64GB以上内存的服务器:shared_buffers = 16GB, effective_cache_size = 内存的75%

Q5:如何监控参数修改对性能的影响?

A5:可以使用以下方法监控参数修改的影响:

  • 使用pg_stat_statements扩展分析查询性能变化
  • 监控系统资源使用情况(CPU、内存、磁盘I/O)
  • 使用EXPLAIN ANALYZE比较查询计划变化
  • 监控PostgreSQL日志中的慢查询

Q6:哪些参数对写入性能影响最大?

A6:对写入性能影响较大的参数包括:

  • shared_buffers:影响数据缓存
  • wal_buffers:影响WAL缓存
  • checkpoint_timeout和max_wal_size:影响检查点频率
  • synchronous_commit:影响事务提交性能
  • wal_level:影响WAL日志详细程度

Q7:哪些参数对查询性能影响最大?

A7:对查询性能影响较大的参数包括:

  • effective_cache_size:影响查询计划选择
  • work_mem:影响排序和哈希操作性能
  • random_page_cost:影响索引扫描成本估算
  • default_statistics_target:影响统计信息质量
  • max_parallel_workers_per_gather:影响并行查询性能