关闭无用程序与服务:使用top命令(按Shift+M按内存排序)识别并关闭占用高的无关进程;通过systemctl disable <服务名>禁用不需要的系统服务(如firewalld,若无需防火墙),减少系统内存消耗。
清理内存缓存:执行sync同步内存缓冲区到磁盘,再通过echo 3 | sudo tee /proc/sys/vm/drop_caches释放页面缓存、dentries和inodes,快速缓解内存压力。
调整Swappiness值:编辑/etc/sysctl.conf,添加vm.swappiness=10(默认60,值越低越少使用Swap),执行sudo sysctl -p生效,减少系统因内存不足而使用Swap分区的频率。
优化内核参数:修改/etc/sysctl.conf,添加以下参数提升TCP连接效率:net.ipv4.tcp_tw_reuse=1(重用TIME-WAIT连接)、net.ipv4.tcp_fin_timeout=30(缩短TIME-WAIT超时)、net.core.somaxconn=1024(增加监听队列长度),执行sudo sysctl -p使配置生效。
调整内存参数:根据服务器内存大小优化PostgreSQL配置(如64GB内存服务器):shared_buffers=16GB(占总内存25%-40%,用于缓存数据页)、work_mem=256MB(每个查询操作的内存,如排序、哈希)、maintenance_work_mem=2GB(维护操作如VACUUM的内存)、wal_buffers=512MB(WAL日志缓冲区,设为shared_buffers的1/32)。
启用并行计算:设置max_parallel_workers_per_gather=8(根据CPU核心数调整,如16核服务器设为8),允许查询使用多线程并行执行,提升复杂查询性能。
优化I/O性能:设置effective_io_concurrency=200(针对NVMe SSD优化,并发I/O请求数),减少数据库I/O等待时间。
定期数据库维护:执行VACUUM清理表中死元组,ANALYZE更新统计信息(帮助查询优化器选择最优执行计划),REINDEX重建碎片化索引,保持数据库高效运行。
关闭不必要插件与功能:进入pgAdmin设置,禁用未使用的插件(如图形化工具、第三方扩展),减少内存占用。
调整连接数与使用连接池:减少pgAdmin同时打开的数据库连接数(如将max_connections设为50以下);使用PgBouncer等连接池工具管理连接,复用连接资源,降低内存消耗。
优化SQL查询:通过pgAdmin的查询工具审查SQL,避免复杂连接(如多表JOIN)、子查询和全表扫描,添加适当索引(如对WHERE、JOIN字段建索引),减少查询返回的数据量。
限制查询资源:在pgAdmin中设置查询超时(如statement_timeout=30s),避免长时间运行的查询占用大量内存。
监控内存使用:使用top、htop(实时查看进程内存占用)、vmstat 1(监控系统内存、Swap使用情况)等工具,定期检查pgAdmin及PostgreSQL的内存使用趋势,及时发现异常。
升级硬件:若上述方法无法解决内存瓶颈,考虑升级服务器物理内存(如从8GB增至16GB或更高),从根本上提升系统内存容量。