在使用postgresql
过程当中如果并发比较高,并且数据量也比较大的时候需要对配置项做一些优化
实际的postgresql
默认配置比较保守,所以如果机器硬件配置还可以的话可以大幅度改动
不同版本下的配置默认值是不一样的,具体以官方文档为准
以下配置是pg14版本
max_connections
shared_buffers
128MB
PostgreSQL
用于缓存数据IO
压力很大的情况下,提高该值可以减少磁盘IO
work_mem
加快查询排序
默认4M
设置在写入临时磁盘文件之前查询操作(例如排序或哈希表)可使用的基础最大内存容量
ORDER BY
、DISTINCT
和归并连接都要用到排序操作,哈希连接、基于哈希的聚集以及基于哈希的IN
子查询处理中都要用到哈希表,
使内部排序和一些复杂的查询都在这个buffer
中完成,有助提高排序等操作的速度,并且降低IO
这个参数和max_connections
有关,如果100个查询并发,最坏情况下就很快就达到400M
的内存使用,
work_mem
* max_connections
需要小于内存,推荐乘积可以保持在内存的1/2
和3/4
之间
effective_cache_size
4G
,该配置不实际占用内存,优化器假设一个查询可以用的最大内存,保守推荐配置为物理内存的1/2
,更加推荐配置为内存的3/4
max_wal_size
IO
1G
wal
全称是write ahead log
,是postgresql
中的online redo log
,保证数据的一致性和事务的完整性WAL
检查点之间允许 WAL
增长到的最大尺寸wal
可以显著减少磁盘写操作的数量,因为只需要将日志文件刷新到磁盘以确保提交事务,而不是事务更改的每个数据文件,日志文件是按顺序写入的,因此同步日志的成本要比刷新数据页的成本低得多consider increasing the configuration parameter "max_wal_size"
,则确实需要增大该参数,在高负载情况下,日志很快就会达到1G
,推荐把该参数配置为32G
或者以上wal_buffers
4M
wal
使用的共享内存大小,可以改成1G
修改数据库配置可以通过修改postgresql.conf
文件或者修改启动命令等方式
在postgresql
的docker
容器当中
postgresql.conf
的文件位置是/var/lib/postgresql/data/postgresql.conf
,如果找不到可以执行如下命令搜索一下
$ find / -name "postgresql.conf" 2>/dev/null
在修改完成该配置文件之后直接挂载进去启动容器就行
该方式简单直接
比如修改最大连接数量,配置启动命令为postgres -c max_connections=500
即可
最终经过优化,修改pg
的启动命令改为
$ postgres -c max_connections=500 -c shared_buffers=1GB -c work_mem=128MB -c max_wal_size=64GB -c wal_buffers=1GB
进入到psql
环境下面执行show
命令验证
500 (1 row)
或者使用show all
查看所有配置
postgresql
检查点checkpoint
产生原因
wal
日志文件,保证足够的速度wal
会占用大量磁盘,并且故障恢复的时候redo
的wal
日志太多导致故障恢复速度变慢checkpoint
概述
wal
缓冲区,提交后,更改被追加到磁盘上面的wal
日志,永久生效wal
日志中的更改被应用于数据文件checkpoint
执行的时候会识别共享缓冲区的脏页,把数据写入数据文件当中(脏页刷入),然后删除这个检查点位置之前的wal
文件触发条件
checkpoint
命令wal
文件的总大小超过了max_wal_size
配置的大小checkpoint_timeout
配置的超时时间pg_start_backup
备份的时候本文作者:Kevin@灼华
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!