跳到主要内容

配置参数优化

前言

列举一些对pg性能影响比较大的配置参数

查询配置参数:show <param name>;

最大客户端连接数max_connections

默认100,根据机器实际负载来调整,不是越大越好。

数据库缓冲区shared_buffers

生产环境一般设置为物理内存的25%

硬盘缓存的内存effective_cache_size

用于估计可以做硬盘缓存的内存大小

维护任务的内存maintenance_work_mem

用于维护任务的内存设置,对于vacuum, restore, create index, foreign key和alter table等操作有影响

检查点完成速度checkpoint_completion_target

制定检查点完成的速度,0.5 表示在 checkout_timeout 一半的时间内完成。checkpoint_completion_target 参数的值越大,意味着检查点进程的休眠时间越长。休眠时间越长,内存数据刷盘的IO操作越平滑,从而提高IO性能。

列的默认统计目标default_statistics_target

增加该参数的值会增加sql语句分析的时间,但可能会改善数据库优化器的优化质量

硬盘读写成本估计random_page_cost

用于设置数据库优化对一次非顺序读写获取硬盘页面的成本估计。减小该参数值将导致数据库更倾向于索引扫描,增加值将让索引扫描看起来相对更昂贵。

硬盘IO操作并发数effective_io_concurrency

用于设置pg可以同时被执行的并发硬盘IO操作的数目,增加参数值可以增加单个pg会话并行发起的IO操作数目。对于HDD类型的硬盘,一般设置2~5;对于SSD,则可以设置100以上或更高

查询的最大内存容量work_mem

决定了数据库在执行某些操作时,每个操作可以使用的最大内存量,超过这个限制就会将数据写入临时文件(spill to disk),当数据量溢出到临时文件,硬盘IO性能将拖慢执行速度。

设置过高容易耗尽内存

预写日志缓冲区wal_buffers

指定wal log缓冲区大小,一般不需要设置特别大,对于业务繁忙的数据库这样有助于提高数据写的性能