# DB Version: 14
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 4 GB
# CPUs num: 4
# Connections num: 2000
# Data Storage: ssd
max_connections = 2000
shared_buffers = 1GB ###物理内存的1/4
effective_cache_size = 3GB ###物理内存的3/4,提供了可以用于磁盘缓存存储器的估计
maintenance_work_mem = 256MB ###物理内存的1/16,默认值是64MB。或者按( RAM * 0.15 / autovacuum_max_workers )
checkpoint_completion_target = 0.9
wal_buffers = 16MB ###或者按shared_buffers/32
default_statistics_target = 100 ###默认值为100对于大多数工作负载是比较合理的
random_page_cost = 1.1 ###随即磁盘访问时,单个页面的读取开销。ssd为1.1 hdd为4,默认值为4.0
effective_io_concurrency = 200 ###Linux下配置,window不需要。设置同时被执行的并发磁盘I/O操作的数量。0表示禁用异步I/O请求,默认是1。对位图索引扫描有效。
work_mem = 262kB ###跟max_connections、内存配置相关,一般设置 RAM * 0.25 / max_connections
min_wal_size = 2GB
max_wal_size = 8GB
max_worker_processes = 4 ###等于cpu个数,数据库允许的最大后台进程数,并行进程属于后台进程的一种。
max_parallel_workers_per_gather = 2 ### 1/2 max_parallel_workers,并行查询进程数。
max_parallel_workers = 4 ###等于cpu个数,数据库循序的最大并行进程数。
max_parallel_maintenance_workers = 2 ###1/2 max_parallel_workers ,维护并行进程数
## max_parallel_workers_per_gather + max_parallel_maintenance_works <= max_parallel_workers
PostgreSQL应该调整的参数
max_connections:允许的最大客户端连接数。这个参数设置大小和work_mem有一些关系。配置的越高,可能会占用系统更多的内存。通常可以设置数百个连接,如果要使用上千个连接,建议配置连接池来减少开销。
shared_buffers:PostgreSQL使用自己的缓冲区,也使用Linux操作系统内核缓冲OS Cache。这就说明数据两次存储在内存中,首先是PostgreSQL缓冲区,然后是操作系统内核缓冲区。与其他数据库不同,PostgreSQL不提供直接IO,所以这又被称为双缓冲。
PostgreSQL缓冲区称为shared_buffer,建议设置为物理内存的1/4。而实际配置取决于硬件配置和工作负载,如果你的内存很大,而你又想多缓冲一些数据到内存中,可以继续调大shared_buffer。
Effective_cache_size:这个参数主要用于Postgre查询优化器。是单个查询可用的磁盘高速缓存的有效大小的一个假设,是一个估算值,它并不占据系统内存。
由于优化器需要进行估算成本,较高的值更有可能使用索引扫描,较低的值则有可能使用顺序扫描。一般这个值设置为内存的1/2是正常保守的设置,设置为内存的3/4是比较推荐的值。
通过free命令查看操作系统的统计信息,您可能会更好的估算该值。
work_mem: 这个参数主要用于写入临时文件之前内部排序操作和散列表使用的内存量,增加work_mem参数将使PostgreSQL可以进行更大的内存排序。
这个参数和max_connections有一些关系,假设你设置为30MB,则40个用户同时执行查询排序,很快就会使用1.2GB的实际内存。
同时对于复杂查询,可能会运行多个排序和散列操作,例如涉及到8张表进行合并排序,此时就需要8倍的work_mem。
maintenance_work_mem:指定维护操作使用的最大内存量,例如(Vacuum、Create Index和Alter Table Add Foreign Key),默认值是64MB。由于通常正常运行的数据库中不会有大量并发的此类操作,可以设置的较大一些,提高清理和创建索引外键的速度。
wal_buffers: 事务日志缓冲区的大小,PostgreSQL将WAL记录写入缓冲区,然后再将缓冲区刷新到磁盘。在PostgreSQL 12版中,默认值为-1,也就是选择等于shared_buffers的1/32 。
如果自动的选择太大或太小可以手工设置该值。一般考虑设置为16MB。
synchronous_commit:客户端执行提交,并且等待WAL写入磁盘之后,然后再将成功状态返回给客户端。可以设置为on,remote_apply,remote_write,local,off等值。
默认设置为on。如果设置为off,会关闭sync_commit,客户端提交之后就立马返回,不用等记录刷新到磁盘。此时如果PostgreSQL实例崩溃,则最后几个异步提交将会丢失。
default_statistics_target:PostgreSQL使用统计信息来生成执行计划。统计信息可以通过手动Analyze命令或者是autovacuum进程启动的自动分析来收集,default_statistics_target参数指定在收集和记录这些统计信息时的详细程度。
默认值为100对于大多数工作负载是比较合理的,对于非常简单的查询,较小的值可能会有用,而对于复杂的查询(尤其是针对大型表的查询),较大的值可能会更好。
为了不要一刀切,可以使用ALTER TABLE .. ALTER COLUMN .. SET STATISTICS覆盖特定表列的默认收集统计信息的详细程度。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




