作用:PostgreSQL用于缓存表和索引数据的核心内存区域,直接影响查询性能。
配置建议:通常设置为系统可用物理内存的25%-40%(避免占用过多内存导致操作系统缓存不足)。
示例:若服务器有16GB物理内存,可设置为4GB(shared_buffers = 4GB)。
注意:需重启PostgreSQL服务使更改生效。
作用:每个数据库连接执行排序(ORDER BY)、哈希(HASH JOIN)、聚合(GROUP BY)等操作时的内存配额。
配置建议:
4MB-16MB(如work_mem = 8MB);work_mem = 32MB);work_mem * max_connections需小于系统总内存的50%,避免内存耗尽。work_mem = 8MB。作用:维护操作(VACUUM、CREATE INDEX、ALTER TABLE等)的内存配额,提升维护效率。
配置建议:设置为系统可用内存的1.6%-3.2%(或256MB-2GB,根据维护任务规模调整)。
示例:maintenance_work_mem = 512MB(适合大型表的索引创建或VACUUM操作)。
作用:查询优化器估算操作系统缓存PostgreSQL数据的大小,影响查询计划选择(如是否使用索引)。
配置建议:设置为系统可用内存的50%-75%(如effective_cache_size = 12GB,对应16GB内存)。
注意:该参数不占用实际内存,仅为优化器提供参考。
作用:存储预写日志(WAL)的共享内存缓冲区,影响事务提交性能。
配置建议:通常设置为shared_buffers的3%-4%(或16MB-32MB),若写入负载高可适当增加。
示例:wal_buffers = 16MB。
作用:每个会话临时表的内存缓存,用于存储临时查询结果。
配置建议:设置为8MB-64MB(如temp_buffers = 16MB),若频繁使用大型临时表可增加。
注意:仅在会话首次需要临时表时分配内存。
作用:自动VACUUM操作的内存配额,避免自动维护占用过多内存。
配置建议:设置为32MB-64MB(如autovacuum_work_mem = 64MB),适合自动维护场景。
free -h命令查看系统可用内存;postgresql.conf(通常位于/var/lib/pgsql/data/或/usr/local/postgresql/data/)。postgresql.conf:使用文本编辑器(如vi)打开配置文件,调整上述参数;sudo systemctl restart postgresql(或pg_ctl restart -D /path/to/data);psql命令查看参数是否生效(如\echo :shared_buffers)。top、htop查看系统内存占用,或使用PostgreSQL内置视图(如pg_stat_activity、pg_stat_bgwriter)监控数据库内存使用情况;shared_buffers,写密集型可增加wal_buffers)。vm.swappiness(设置为10以下,减少内存换页)、使用noatime挂载选项(减少文件访问时间更新);EXPLAIN ANALYZE分析慢查询,创建合适索引(如B-Tree索引用于等值查询),避免全表扫描。