外观
PostgreSQL 核心参数列表
内存相关参数
内存参数是影响PostgreSQL性能的关键配置,合理分配内存资源可以显著提高数据库性能。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| shared_buffers | 128MB | 128kB ~ 物理内存 | 共享缓冲区大小,用于缓存数据块 | 物理内存的25%,但不超过16GB |
| work_mem | 4MB | 64kB ~ 2TB | 每个排序/哈希操作可用的内存 | 对于OLTP系统:16MB-64MB;对于OLAP系统:128MB-512MB |
| maintenance_work_mem | 64MB | 1MB ~ 2TB | 维护操作(VACUUM、CREATE INDEX等)可用的内存 | 物理内存的10%,但不超过1GB |
| effective_cache_size | 4GB | 128kB ~ 物理内存 | PostgreSQL优化器假设的可用缓存大小 | 物理内存的75% |
| temp_buffers | 8MB | 800kB ~ 物理内存 | 临时表可用的内存 | 8MB-64MB |
| wal_buffers | 64kB | 32kB ~ 物理内存 | WAL缓冲区大小 | 对于高写入负载:16MB-64MB;默认值通常足够 |
连接相关参数
连接参数控制PostgreSQL可以接受的并发连接数和连接行为。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| max_connections | 100 | 1 ~ 262143 | 最大并发连接数 | 对于OLTP系统:根据服务器资源调整,通常200-500;使用连接池时可设为较大值 |
| superuser_reserved_connections | 3 | 0 ~ max_connections-1 | 为超级用户保留的连接数 | 3-5 |
| listen_addresses | localhost | 主机名或IP地址列表 | 监听的网络地址 | 生产环境建议指定具体IP,而非* |
| port | 5432 | 1 ~ 65535 | 监听端口 | 保持默认或根据安全策略修改 |
| tcp_keepalives_idle | 7200 | 0 ~ INT_MAX | TCP连接空闲时间(秒) | 600-1800 |
| tcp_keepalives_interval | 75 | 0 ~ INT_MAX | TCP keepalive探测间隔(秒) | 60-120 |
| tcp_keepalives_count | 9 | 0 ~ INT_MAX | TCP keepalive探测失败次数 | 3-5 |
WAL相关参数
WAL(Write-Ahead Log)参数控制事务日志的生成和写入行为,影响数据安全性和写入性能。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| wal_level | replica | minimal, replica, logical | WAL日志级别 | 对于复制:replica;对于逻辑复制:logical |
| fsync | on | on, off | 是否强制WAL写入磁盘 | 生产环境必须设为on |
| synchronous_commit | on | on, local, remote_write, remote_apply, off | 同步提交级别 | 对于高可用性:on;对于高性能:local或remote_write |
| wal_sync_method | fsync | 取决于操作系统 | WAL同步方法 | 保持默认,或根据操作系统调整 |
| checkpoint_timeout | 5min | 30s ~ 1d | 检查点间隔时间 | 15min-30min |
| max_wal_size | 1GB | 2MB ~ 1TB | 触发检查点的WAL大小阈值 | 对于高写入负载:8GB-32GB |
| min_wal_size | 80MB | 2MB ~ max_wal_size | 检查点后保留的最小WAL大小 | 对于高写入负载:1GB-4GB |
| wal_compression | off | on, off, pglz | 是否压缩WAL记录 | 对于存储受限环境:on |
检查点相关参数
检查点参数控制检查点的行为,影响数据库恢复时间和写入性能。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| checkpoint_completion_target | 0.9 | 0.0 ~ 1.0 | 检查点完成目标比例 | 0.7-0.9 |
| checkpoint_flush_after | 256kB | 0 ~ 2TB | 检查点写入多少数据后强制刷新 | 对于SSD:1MB-4MB;对于HDD:128kB-256kB |
| checkpoint_warning | 30s | 0 ~ INT_MAX | 检查点耗时超过此值时发出警告 | 30s-60s |
优化器相关参数
优化器参数控制查询优化器的行为,影响查询计划的生成。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| random_page_cost | 4.0 | 0.1 ~ 100.0 | 随机读取一页的成本 | 对于SSD:1.1-1.5;对于HDD:3.0-4.0 |
| seq_page_cost | 1.0 | 0.1 ~ 100.0 | 顺序读取一页的成本 | 保持默认 |
| effective_io_concurrency | 1 | 1 ~ 1000 | 有效I/O并发度 | 对于SSD:200-500;对于HDD:2-8 |
| default_statistics_target | 100 | 1 ~ 10000 | 统计信息采样目标 | 对于复杂查询:200-500 |
| constraint_exclusion | partition | on, off, partition | 是否启用约束排除 | 对于分区表:partition或on |
| enable_seqscan | on | on, off | 是否启用顺序扫描 | 保持默认 |
| enable_indexscan | on | on, off | 是否启用索引扫描 | 保持默认 |
| enable_bitmapscan | on | on, off | 是否启用位图扫描 | 保持默认 |
自动维护相关参数
自动维护参数控制自动VACUUM和自动ANALYZE的行为。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| autovacuum | on | on, off | 是否启用自动VACUUM | 生产环境必须设为on |
| autovacuum_max_workers | 3 | 1 ~ 100 | 自动VACUUM最大工作线程数 | 4-8 |
| autovacuum_naptime | 1min | 1s ~ 1h | 自动VACUUM检查间隔 | 30s-1min |
| autovacuum_vacuum_threshold | 50 | 1 ~ INT_MAX | 触发自动VACUUM的最小修改行数 | 50-100 |
| autovacuum_vacuum_scale_factor | 0.2 | 0.0 ~ 1.0 | 触发自动VACUUM的比例因子 | 对于频繁更新的表:0.05-0.1 |
| autovacuum_analyze_threshold | 50 | 1 ~ INT_MAX | 触发自动ANALYZE的最小修改行数 | 50-100 |
| autovacuum_analyze_scale_factor | 0.1 | 0.0 ~ 1.0 | 触发自动ANALYZE的比例因子 | 0.05-0.1 |
日志相关参数
日志参数控制PostgreSQL的日志行为,影响问题排查和性能监控。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| log_destination | stderr | stderr, csvlog, syslog, eventlog | 日志输出目标 | 根据系统环境调整 |
| logging_collector | off | on, off | 是否启用日志收集器 | 生产环境建议设为on |
| log_directory | log | 目录路径 | 日志文件存储目录 | 保持默认或根据系统规范调整 |
| log_filename | postgresql-%Y-%m-%d_%H%M%S.log | 文件名模式 | 日志文件名格式 | 保持默认 |
| log_rotation_age | 1d | 0 ~ 1440min | 日志文件轮转时间 | 1d-7d |
| log_rotation_size | 0 | 0 ~ 10GB | 日志文件轮转大小 | 100MB-1GB |
| log_min_duration_statement | -1 | -1 ~ INT_MAX | 记录执行时间超过此值的SQL | 对于性能监控:100ms-1s |
| log_statement | none | none, ddl, mod, all | 记录的SQL语句类型 | 对于安全审计:ddl或mod |
| log_error_verbosity | default | terse, default, verbose | 错误日志详细程度 | default或verbose |
| log_lock_waits | off | on, off | 是否记录锁等待 | 对于并发问题排查:on |
| log_checkpoints | off | on, off | 是否记录检查点信息 | 对于性能监控:on |
安全相关参数
安全参数控制PostgreSQL的安全行为,保护数据库免受攻击。
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| listen_addresses | localhost | 主机名或IP地址列表 | 监听的网络地址 | 生产环境建议指定具体IP,而非* |
| max_connections | 100 | 1 ~ 262143 | 最大并发连接数 | 根据服务器资源调整 |
| password_encryption | scram-sha-256 | md5, scram-sha-256 | 密码加密算法 | scram-sha-256 |
| ssl | off | on, off | 是否启用SSL连接 | 生产环境建议设为on |
| ssl_cert_file | server.crt | 文件路径 | SSL证书文件 | 保持默认或根据系统规范调整 |
| ssl_key_file | server.key | 文件路径 | SSL私钥文件 | 保持默认或根据系统规范调整 |
| ssl_ca_file | 文件路径 | SSL CA证书文件 | 生产环境建议配置 | |
| authentication_timeout | 1min | 1s ~ 600s | 认证超时时间 | 30s-1min |
| tcp_keepalives_idle | 7200 | 0 ~ INT_MAX | TCP连接空闲时间 | 600-1800 |
其他重要参数
| 参数名称 | 默认值 | 取值范围 | 说明 | 推荐配置 |
|---|---|---|---|---|
| max_parallel_workers_per_gather | 2 | 0 ~ 1024 | 每个Gather节点的最大并行工作线程数 | 对于多核CPU:2-4 |
| max_parallel_workers | 8 | 0 ~ 1024 | 系统最大并行工作线程数 | CPU核心数的一半 |
| max_worker_processes | 8 | 8 ~ 262143 | 系统最大后台工作线程数 | CPU核心数 |
| dynamic_shared_memory_type | posix | posix, sysv, windows, mmap | 动态共享内存类型 | 保持默认 |
| max_files_per_process | 1000 | 10 ~ 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:有两种方式可以永久保存参数修改:
使用ALTER SYSTEM命令:修改postgresql.auto.conf文件,永久生效
sqlALTER SYSTEM SET shared_buffers = '4GB';直接编辑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:影响并行查询性能
