PostgreSQL postgresql.conf配置文件常规参数介绍

max_connections = 300
决定数据库的最大并发连接数。
参考值:不超过物理内存(GB)*50。

shared_buffers =4GB
设置数据库服务器将使用的共享内存缓冲区量。默认通常是 128 兆字节(128MB)
参考值: 1/4 主机内存

work_mem = 16MB
写到临时磁盘文件之前被内部排序操作和哈希表使用的内存量。
排序、去重、归并需要排序,再生成临时变落入磁盘之前,会在内存中占用一部分空间。同一个时刻,可能有很多排序的工作都会按此参数分配内存,所以这个值不能太大。
如果要使用语句中有较大的排序操作,可以在会话级别设置该参数,set work_men = ‘2GB’,提高执行速度。
参考值:# 1/4 主机内存 / 256 (假设256个并发同时使用work_mem)

maintenance_work_mem =1GB
指定在维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGNKEY)中使用的最大的内存量。这样的操作并不频繁,所以可以比work_men大很多。
参考值:内存的1/4除以autovacuum_max_workers数量。
系统内存超过32G时,建议设置为1GB。超过64GB时,建议设置为2GB。超过128GB时,建议设置为4GB。主要作用是改进清理和恢复数据库转储的性能,设定一个autovacuum_max_workers匹配值就好。

下面三个参数主要控制并发工作者数量,对于性能有不小影响。
max_worker_processes = 32
系统能够支持的后台进程的最大数量,很多processes都需要获取的根源,所以尽可能保证充足的线程数量。

max_parallel_workers = 4
并行工作者数量,从max_worker_processes获取,所以不能大于后者。
参考值:cpu-4

max_parallel_workers_per_gather=4
每个查询并行工作者数量,不能大于上面两个
参考值:cpu-4

effective_cache_size
设置规划器对一个单一查询可用的有效磁盘缓冲区尺寸的假设
更高的数值会使得索引扫描更可能被使用,更低的数值会使
得顺序扫描更可能被使用。它只用于估计的目的
参考值:内存一半

–日志相关
logging_collector = on
启动日志收集器
log_destination = ‘csvlog’
stderr, csvlog, syslog, and eventlog(windows)
日志记录格式,默认是stderr。csvlog可以以csv格式输出,便于分析。如果没有分析需求,个人推荐默认就好。

log_directory = ‘log’
log存放相遇于PGDATA的位置

log_filename = ‘postgresql-%a.log’
log 日志文件名,控制日志输出频率。上面是保存一周,每天一个log日志文件。

SQL审计相关日志记录
log_min_duration_statement = 5s; (重要)
慢查询日志记录,运行超过5s的语句被认为是慢查询。根据业务情况设定。

log_duration = off
每一个语句的时间都被记录。

log_statement = ‘mod’
ddl =数据定义语句,例如CREATE、ALTER和 DROP语句。
mod = ddl+数据修改语句例如INSERT, UPDATE、DELETE、TRUNCATE, 和COPY FROM。
all = 所有语句,但不包含语法错误的语句
log_lock_waits = on
当一个会话为获得一个锁等到超过deadlock_timeout时,是否记录日志。

deadlock_timeout = 1s
死锁检测之前在一个锁上等待的总时间。

检查点相关参数
checkpoint_warning =30s 检查点频率检查
如果检查点触发的频率小于30s,则log日志中会提醒你增加max_wal_size。
参考设置:如果硬盘的性能很好可以设置小一些,如果硬盘性能差就设置大一些。这个参数不影响性能。只是用来检查实际checkpoint发生的频率。

checkpoint_timeout = 30 mins 检查点触发时间间隔
自动检查点出发的时间,增加这个参数的值会增加崩溃恢复所需的时间。磁盘性能好的话可以适当减小。这个值减小会增加检查点频率,降低性能。

max_wal_size = 8GB
参考值:主机内存1/2
在自动WAL检查点使得WAL增长到最大尺寸,到了这个尺寸,检查点就开始工作。

min_wal_size = 1GB
WAL磁盘使用率低于这个设置,旧的WAL文件总数被回收,确保预留足够的WAL空间处理WAL使用中的峰值。
参考值:主机内存1/8

附录
log_duration=on 和 log_min_duration_statement=0的区别
前者所有查询时间都被记录,后者查询时间>0都被记录。听起来一个意思。

区别:log_min_duration_statement强制记录SQL文本,而log_duration不记录SQL文本。
也就是说,如果log_duration=on 同时log_min_duration_statement=5s时。
所有的语句都被记录时间,但是只有查询超过5s的语句才被记录SQL文。
个人认为log_duration只有在特殊场景才有意义。log_min_duration_statement已经足够用了。

posted @ 2024-10-11 17:10  学无止境的小一  阅读(111)  评论(0编辑  收藏  举报  来源