作用:用于缓存频繁访问的数据页,减少磁盘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优化。