postgresql 性能參數配置方式

查詢Linux服務器配置

在進行性能調優之前,需要清楚知道服務器的配置信息,比如說 CPU,內存,服務器版本等信息。

查詢系統版本信息

root@ubuntu160:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty

Linux查看物理CPU個數、核數、邏輯CPU個數

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數 
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數
 
# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
 
# 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

查詢內存信息

cat /proc/meminfo

PostgreSQL配置參數查看方式

--查看所有數據庫參數的值
show all; 

PostgreSQL性能調優重要的配置參數

該表格來自網上大神整理的:

選項 默認值 說明 是否優化 原因
max_connections 100 允許客戶端連接的最大數目 因為在測試的過程中,100個連接已經足夠
fsync on 強制把數據同步更新到磁盤 因為系統的IO壓力很大,為瞭更好的測試其他配置的影響,把改參數改為off
shared_buffers 24MB 決定有多少內存可以被PostgreSQL用於緩存數據(推薦內存的1/4,不超過內存的1/2) 在IO壓力很大的情況下,提高該值可以減少IO
work_mem 1MB 使內部排序和一些復雜的查詢都在這個buffer中完成,不夠要適可而止,每個連接都要用這麼大的 有助提高排序等操作的速度,並且減低IO
effective_cache_size 128MB 優化器假設一個查詢可以用的最大內存,和shared_buffers無關(推薦內存的1/2) 設置稍大,優化器更傾向使用索引掃描而不是順序掃描
maintenance_work_mem 16MB 這裡定義的內存隻是被VACUUM等耗費資源較多的命令調用時使用 把該值調大,能加快命令的執行
wal_buffer 768kB 日志緩存區的大小 可以降低IO,如果遇上比較多的並發短事務,應該和commit_delay一起用
checkpoint_segments 3 設置wal log的最大數量數(一個log的大小為16M) 默認的48M的緩存是一個嚴重的瓶頸,基本上都要設置為10以上
checkpoint_completion_target 0.5 表示checkpoint的完成時間要在兩個checkpoint間隔時間的N%內完成 能降低平均寫入的開銷
commit_delay 0 事務提交後,日志寫到wal log上到wal_buffer寫入到磁盤的時間間隔。需要配合commit_sibling 能夠一次寫入多個事務,減少IO,提高性能
commit_siblings 5 設置觸發commit_delay的並發事務數,根據並發事務多少來配置 減少IO,提高性能

當然我這邊也有一份前面老員工牛人整理的來看一下怎麼配置。

PostgreSQL配置參數修改的方式

1.修改配置文件

在配置文件C:\PostgreSQL\data\pg96\postgresql.conf 中直接修改,修改前記得備份一下原文件,因為你不知道意外和明天不知道哪個會先來。修改完成之後,記得重啟數據庫哦。

2.命令行的修改方式

ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }

例如:我們現在要修改 maintenance_work_mem

--參數
show all;
 
show maintenance_work_mem;
--註意這裡的設置不會改變postgresql.conf,隻會改變postgresql.conf
ALTER SYSTEM SET maintenance_work_mem= 1048576;
 
--重啟數據庫
show maintenance_work_mem; 
 
--取消postgresql.auto.conf的參數設置
ALTER SYSTEM SET maintenance_work_mem= default;

好的,那我們來

cd /home/postgres/pgsql/data
cat postgresql.conf

superuser_reserved_connections = 3
unix_socket_directory = '/var/lib/pgsql/current/data/unix_socket'
unix_socket_permissions = 0700
log_min_duration_statement = 10000ms
 
deadlock_timeout = 5s
track_activity_query_size = 10000
stats_temp_directory = 'pg_stat_tmp'
 
autovacuum = on
log_autovacuum_min_duration = 0
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
 
track_activities = on
track_counts = on
track_io_timing = on 
 
#log parameter
log_destination = 'csvlog'
logging_collector = on
log_directory = 'pg_log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 10MB
log_checkpoints = on
log_lock_waits = on
 
#性能參數調整
 
shared_buffers = 16384MB 
temp_buffers = 1024MB 
work_mem = 2048MB 
maintenance_work_mem = 4096MB

保存和重啟。因為我的是本地測試的機器並不是最後線上的,最後線上的一定會這麼用的。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: