一、硬件层面优化
shared_buffers为2-3.2G)。二、操作系统层面优化
vm.swappiness:设置为0(默认60),避免系统过度使用swap空间,优先使用物理内存,减少磁盘I/O。dirty_ratio/dirty_background_ratio:将vm.dirty_background_ratio设为10(默认10)、vm.dirty_ratio设为20(默认20),加快脏页刷新频率,避免大量脏页堆积导致性能下降。vm.overcommit_memory:设置为2(默认0),禁止内存超额分配,防止PostgreSQL因内存不足崩溃。deadline(echo deadline > /sys/block/sda/queue/scheduler),减少查询延迟,更适合数据库的随机I/O特性。noatime挂载选项:修改/etc/fstab,将数据分区挂载为noatime(如/dev/sda1 /data ext4 noatime 0 0),避免每次文件访问都更新访问时间,减少不必要的磁盘写入。三、PostgreSQL配置优化
shared_buffers:设置为物理内存的25%-40%(如8G内存设为2-3.2G),用于缓存表数据和索引,提高查询命中率。work_mem:设置为10-100MB(如16G内存设为64M),控制每个查询操作(如排序、哈希表)的内存使用,避免磁盘临时文件。maintenance_work_mem:设置为1-2G(如8G内存设为1G),用于维护操作(如创建索引、VACUUM),提高维护效率。effective_cache_size:设置为物理内存的50%-75%(如8G内存设为4-6G),帮助查询优化器判断系统可用缓存,生成更优执行计划。effective_io_concurrency:设置为SSD的并发数(如SSD设为4、NVMe设为16),提高并发I/O处理能力。max_worker_processes:设置为CPU核心数的1-2倍(如4核设为4-8),支持并行查询,提高复杂查询性能。max_parallel_workers_per_gather:设置为CPU核心数的1-2倍(如4核设为4-8),增加并行工作线程,加速查询执行。wal_buffers:设置为shared_buffers的1/32(如shared_buffers=4G,设为128M),缓冲WAL数据,提高写入性能。checkpoint_completion_target:设置为0.9(默认0.5),延长检查点时间,分散I/O压力,减少检查点峰值。wal_compression:设置为on,压缩WAL日志,减少磁盘写入量。四、索引与查询优化
>、<)和相等查询(如=),是PostgreSQL默认索引类型。EXPLAIN ANALYZE分析查询计划,识别全表扫描、排序等性能瓶颈。SELECT *,只查询需要的列,减少数据传输量。LIMIT限制返回行数,避免处理过多数据。INSERT INTO ... VALUES (...), (...)),减少多次I/O操作。REINDEX重建碎片化索引(如每月一次),提高索引查询效率。五、维护与监控优化
autovacuum_vacuum_cost_delay为20ms(默认20ms)、autovacuum_vacuum_cost_limit为2000(默认200),增加自动清理的频率,避免表膨胀。autovacuum_analyze(默认开启),自动更新统计信息,帮助优化器生成更优查询计划。VACUUM清理无用数据(如删除的行),释放空间。ANALYZE更新表统计信息,确保优化器做出准确决策。pg_stat_activity查看当前查询状态(如等待事件),pg_stat_bgwriter监控后台写入情况,iostat监控磁盘I/O负载,及时发现性能瓶颈。