作用:用于缓存频繁访问的数据页,减少磁盘I/O,是PostgreSQL性能优化的关键参数。
配置建议:通常设置为系统物理内存的25%-40%(如8GB内存可设为2-3.2GB)。需避免设置过大(如超过40%),以免与操作系统缓存竞争内存。
调整方法:修改postgresql.conf
文件中的shared_buffers
参数,或使用ALTER SYSTEM SET shared_buffers = '2GB';
命令动态调整,修改后需重启服务生效。
作用:控制每个查询操作(如ORDER BY
、DISTINCT
、HASH JOIN
、GROUP BY
)的内存使用量,直接影响复杂查询的性能。
配置建议:默认值为4MB,生产环境建议设置为16MB-256MB(具体取决于查询复杂度和并发量)。需注意:max_connections × work_mem
不应超过系统可用内存的50%,避免内存溢出。
调整方法:通过ALTER SYSTEM SET work_mem = '64MB';
命令修改,无需重启服务(需执行SELECT pg_reload_conf();
重载配置)。
作用:用于维护操作(如VACUUM
、CREATE INDEX
、ANALYZE
),提升批量数据处理效率。
配置建议:默认值为64MB,生产环境建议设置为512MB-1GB(大型数据库可适当增加)。该参数为会话级私有内存,不影响其他查询。
调整方法:使用ALTER SYSTEM SET maintenance_work_mem = '1GB';
命令修改,重载配置生效。
作用:告知查询规划器操作系统文件系统缓存的大小,帮助优化器选择更优的执行计划(如是否使用索引)。
配置建议:设置为系统物理内存的50%-75%(如16GB内存可设为8-12GB)。该参数仅为估算值,不影响实际内存分配。
调整方法:通过ALTER SYSTEM SET effective_cache_size = '12GB';
命令修改,重载配置生效。
sysctl -w vm.swappiness=5
),避免频繁磁盘交换。/etc/sysctl.conf
文件,添加vm.overcommit_memory = 2
,执行sysctl -p
生效。shared_buffers
)。计算公式为kernel.shmmax = shared_buffers × 2
(如shared_buffers=2GB
,则kernel.shmmax=4294967296
),修改/etc/sysctl.conf
后重载。作用:减少内存管理开销,提高内存访问效率,尤其适合shared_buffers
较大的场景。
配置步骤:
大页数量 = shared_buffers / 2MB
(如shared_buffers=2GB
,则需1024个大页)。/etc/sysctl.conf
,添加vm.nr_hugepages=1024
,执行sysctl -p
生效。postgresql.conf
中设置huge_pages = on
,重启服务。作用:用于临时表的内存缓存,提升临时表操作(如CREATE TEMP TABLE
、GROUP BY
)的性能。
配置建议:默认值为8MB,生产环境建议设置为64MB-256MB(可根据临时表大小调整)。该参数为会话级私有内存,仅在需要时分配。
调整方法:ALTER SYSTEM SET temp_buffers = '64MB';
,重载配置生效。
作用:缓存预写式日志(WAL)数据,减少磁盘I/O。
配置建议:默认值为4MB,生产环境建议设置为16MB(或shared_buffers
的1/32-1/64)。对于高写入负载系统,可适当增加。
调整方法:ALTER SYSTEM SET wal_buffers = '16MB';
,无需重启(重载配置)。
pg_stat_activity
、pg_stat_bgwriter
)后再调整下一个参数,避免盲目修改。pg_stat_statements
扩展分析慢查询,识别内存瓶颈;通过top
、htop
等工具监控系统内存占用,确保未出现内存溢出。work_mem
和shared_buffers
优化;数据仓库(大查询分析)侧重effective_cache_size
和maintenance_work_mem
优化。