作用:用于緩存頻繁訪問的數據頁,減少磁盤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
優化。