一、硬件層面優化
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負載,及時發現性能瓶頸。