轉載自:https://blog.csdn.net/huangwenyi1010/article/details/72853785
解決問題
前言
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;
--查詢某一個具體參數
show 選項名;
PostgreSQL性能調優重要的配置參數
| 選項 | 默認值 | 說明 | 是否優化 | 原因 |
|---|---|---|---|---|
| max_connections | 100 | 允許客戶端連接的最大數目 | 否 | 因為在測試的過程中,100個連接已經足夠 |
| fsync | on | 強制把數據同步更新到磁盤 | 是 | 因為系統的IO壓力很大,為了更好的測試其他配置的影響,把改參數改為off |
| shared_buffers | 24MB | 決定有多少內存可以被PostgreSQL用於緩存數據(推薦內存的1/4) | 是 | 在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;
