postgresql重要参数解析及优化
转载自:https://yq.aliyun.com/articles/413018?spm=a2c4e.11155435.0.0.56e45560r1J1NW
1.max_connections 200
最大客户端连接数。每个连接在后端都会对应相应的进程,耗费一定的内存资源。如果连接数上千,需要使用连接池工具。
2.shared_buffers 25% of total memory
数据库用于缓存数据的内存大小。该参数默认值很低(考虑不同的系统平台),需要调整。不宜太大,很多实践表明,大于1/3的内存会降低性能。
3.effective_cache_size 50%-75% of total memory
This is a guideline for how much memory you expect to be available in the OS and PostgreSQL buffer caches, not an allocation! 这个参数只在查询优化器选择时使用,并不是实际分配的内存,该参数越大,查询优化器越倾向于选择索引扫描。
4.checkpoint_segments 256 checkpoint_completion_target 0.9
checkponit_segments wal个数达到多少个数checkponit,还有一个参数checkponit_timeout,控制最长多长时间checkpoint。对于写入比较大的数据库,该值越大越好。但是值越大,执行恢复的时间越长。
checkpoint_completion_target 控制checkponit write 分散写入,值越大越分散。默认值0.5,0.9是一个比较合适的值。
5.work_mem
用于排序,默认值即可。每个连接都会分配一定work_mem,这个是会实际分配的内存,不宜过大,默认值即可。如果要使用语句中有较大的排序操作,可以在会话级别设置该参数,set work_men = ‘2GB’,提高执行速度。
6.maintanance_work_mem
维护性操作使用的内存。例如:vacuum ,create index,alter table add foreign key,restoring database dumps.做这些操作时可以临时设置该值大小,加快执行速度。set session maintanance_work_mem = ‘2GB’;
7.random_page_cost (默认值 4) seq_page_cost(默认值 1)
设置优化器获取一个随机页的cost,相比之下一个顺序扫描页的cost为1.
当使用较快的存储,如raid arrays,scsi,ssd时,可以适当调低该值。有利于优化器悬着索引扫描。ssd 时,可以设置为2.
8.autovacuum
—maintenance_work_mem 1-2GB
—autovacuum_max_workers
如果有多个小型表,分配更多的workers,更少的mem。
大型表,更多的mem,更少的workers。