快戳进来!PostgreSQL数据库通用优化模板!
Whoami:5年+金融、政府、医疗领域工作经验的DBA
Certificate:PGCM、OCP、YCP
Skill:Oracle、Mysql、PostgreSQL、国产数据库
Platform:CSDN、墨天伦、公众号(呆呆的私房菜)
业务范围:数据库安装部署、日常维护、主备切换、故障处理、性能优化、技术培训等。 需要的伙伴或者商业合作请移步 公众号【呆呆的私房菜】获取联系方式。
阅读本文可以了解PostgreSQL数据库配置上的内容,包含操作系统配置、环境变量配置、数据库相关参数配置。

01 操作系统配置
操作系统的优化主要针对防火墙、内核参数、系统限制上做优化。
shell
## 内核参数优化
vi /etc/sysctl.conf
kernel.shmmax = 976257024 #1/2 of physical RAM
kernel.shmall = 2097152 #physical RAM size / pagesize For most systems, this will be the value 2097152
kernel.shmmni = 819200
vm.nr_hugepages = 65536 #hugepage, when memory is bigger than 64G
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
fs.file-max = 6815744
## 应用生效
sysctp -p
注意:上述内核参数配置规则为通用模板,优化过程中的参数的设定要以业务实际情况为准。
shell
## 系统限制优化
vi /etc/security/limits.conf
* soft nofile 1024000 #当前系统生效的打开文件的数目
* hard nofile 1024000 #系统中所能设定的打开文件的最大值
* soft nproc unlimited #当前系统生效的进程的数目
* hard nproc unlimited #系统中所能设定的进程数目的最大值
* soft core unlimited #当前系统生效的内核文件的大小
* hard core unlimited #系统中所能设定的内核文件的最大值
* soft memlock unlimited #当前系统生效的锁定内存地址空间的大小
* hard memlock unlimited #系统中所能设定的的锁定内存地址空间最大值
02 环境变量配置
建议在PostgreSQL数据库部署过程中,配置对应安装用户的环境变量。
shell
su - postgres
vi ~/.bashrc
## 添加以下:
export PGUSER=postgres
export PGPORT=5432
export PATH=$PATH:$HOME/bin:/pg/pg13/bin/
export PGDATA=/pg/pg13/data
$ source ~/.bashrc
03 数据库配置
数据库配置主要涉及连接配置和数据库参数配置。 一、连接配置(pg_hba.conf)
该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限。简单理解就是:允许哪个IP(或哪个网段)的哪个用户通过连接到哪个数据库,以及指定连接时使用的身份验证模式。 文件路径:$PGDATA/pg_hba.conf

选项 | 选项说明 |
---|---|
TYPE | local:本地使用套接字(socket)登陆 |
host:通过tcp/ip登陆 | |
ADDRES | IP地址,指定连接的地址。0.0.0.0表示所有地址。/32表示特定IP,0.0.0.0/32表示本地回环地址127.0.0.1。 |
/24表示小网段下的全部IP,192.168.99.0/24表示192.168.99.0-192.168.99.255的所有IP | |
/16表示大网段下的全部IP。192.168.0.0/16表示192.168.0.0-192.168.255.255所有IP | |
/128表示ipv6的地址 | |
METHOD | trust:免密认证,无需密码直接登录 |
reject:拒绝登录,拒绝某个特定IP或网段登录 | |
MD5加密,密码将转化为md5值进行验证 | |
Password明文密码验证,切勿在非信任网路使用password认证方式 | |
scram-sha-256加密,将密码值转化为scram-sha-256的值进行验证,是postgresql10后新增的SASL 的认证方式也是当下最安全的方法 |
shell
/usr/pgsql - 9.6/bin/psql - h pghostl -p 1921 - U postgres mydb
psql : SCRAM authentication requires libpq version 10 or above
二、连接配置(pg_hba.conf)
文件路径:$PGDATA/postgresql.conf 数据库参数优化分为如下几块内容:
(1)监听参数
shell
## 数据库监听地址
alter system set listen_addresse = '*';
(2)内存参数
shell
## shared_buffers 默认128M,建议为主机内存的1/4。
alter system SET shared_buffers = '4096M';
## maintenance_work_mem 默认64M,建议设置为min(8G,(主机内存/8)/max_parallel_maintenance_workers)
alter system set maintenance_work_mem = '2GB';
## wal_buffers,默认值为4M,建议值 min(wal_segment_size,shared_buffers/32)
alter system set wal_buffers = '16M';
## effective_cache_size,默认值4GB,建议设置为0.75*主机内存
alter system set effective_cache_size = '4GB';
(3)日志参数
shell
## 数据库运行日志,默认不开启
alter system set logging_collector = 'on'
## 日志格式,默认stderr,建议csvlog
alter system set log_destination = 'csvlog';
## 慢SQL记录,单位ms
alter system set log_min_duration_statement = 120000;
## 审计记录,可选参数:none\ddl\mod\all
alter system set log_statement = 'ddl';
## 死锁等待时间,默认1000,单位m
alter system set log_lock_waits = on;
alter system set deadlock_timeout = 1000;
## 临时文件超过某个值时会记录到日志,单位KB
alter system set log_temp_files = 250000;
## 记录更详细的信息
alter system set log_error_verbosity = verbose;
## 记录检查点信息
alter system set log_checkpoints = on;
(4)强制检查点
shell
## 单位s,不建议频繁检查点,否则xlog会产生很多的full page write
alter system set checkpoint_timeout = 1800;
(5)wal保留数量
shell
## pg_wal日志文件段的最小大小
alter system set wal_keep_size = '1GB';
(6)连接数设置
shell
## 设置最大连接数
alter system set max_connections = 1000;
## 设置super最大连接数
alter system set superuser_reserved_connections = 10;
(7)分组提交
shell
## 默认分组提交是即时提交,高并发
alter system set commit_siblings = 5;
alter system set commit_delay = 10;
(8)autovacuum
shell
## 自动清理进程,建议配置为max(min(8,cup核数/2),5)
alter system set autovacuum_max_workers = 8;
(9)归档配置
shell
## 启用归档配置
alter system set archive_mode = on;
alter system set archive_command = 'cp %p /pg/arch/archive_wal_%f' #此处%p表示归档文件全路径,%f表示归档文件名字。