PostgreSQL配置優化

2021-09-02 11:55:00 字數 2396 閱讀 6563

[url]

測試工具

工具名稱 pgbench

資料量 200w(整個資料庫大小約為300m)

模擬客戶端數 4

執行緒數 4

測試時間 60秒

準備命令:pgbench -i -s 20 pgbenchdb

測試命令:pgbench -r -j4 -c4 -t60 testdb

配置檔案

預設的配置配置檔案是儲存在/etc/postgresql/version/main目錄下的postgresql.conf檔案

如果想檢視引數修改是否生效,可以用psql連線到資料庫後,用managing kernel resources

主要選項

選項 預設值 說明 是否優化 原因

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,提高效能

測試資料

測試的資料是執行3次,取平均值。

關閉fsync是為了更好的體現出其他引數對postgresql的影響。

引數 修改值 事務總數 tps(包括建立連線) tps(不包括建立連線)

預設設定

8464 140.999792 141.016182

fsync off 92571 1479.969755 1480.163355

shared_buffers 1gb 100055 1635.759275 1635.977823

work_mem 10mb 101209 1665.804812 1666.04082

effective_cache_size 2gb 98209 1636.733152 1636.970271

maintenance_work_mem 512mb 92930 1548.029233 1548.223108

checkpoint_segments 32 195982 3265.995 3266.471064

checkpoint_completion_target 0.9 194390 3239.406493 3239.842596

wal_buffer 8mb 198639 3310.241458 3310.724067

恢復fsync off 11157 185.883542 185.909849

commit_delay && commit_siblings 10 && 4 11229 187.103538 187.131747

總結事務總數 tps(包括建立連線) tps(不包括建立連線)

優化前 8464 140.999792 141.016182

優化後(fsync=on) 11229 187.103538 187.131747

優化後(fsync=off) 198639 3310.241458 3310.724067

在fsync開啟的情況下,優化後效能能夠提公升30%左右。因為有部分優化選項在預設的sql測試語句中沒有體現出它的優勢,如果到實際測試中,提 公升應該不止30%。 測試的過程中,主要的瓶頸就在系統的io,如果需要減少io的負荷,最直接的方法就是把fsync關閉,但是這樣就會在掉電的情況下,可能會丟失部分數 據。

PostgreSQL配置優化

作業系統 ubuntu13.04 系統位數 64cpu intel r core tm 2 duo cpu 記憶體4g 硬碟seagate st2000dm001 1ch164 測試工具 postgresql 9.1.11 工具名稱 pgbench 資料量200w 整個資料庫大小約為300m 模擬客...

postgresql 日誌配置

log destination csvlog csv模式輸出 logging collector on 收集日誌開啟 log directory pg log 輸出日期的陌路 log filename postgresql u.log 輸出的檔名加星期格式 log truncate on rotat...

postgresql基礎配置

原文 1安裝postgresql yum install postgresql server 2建立資料庫 createdb mydb 如果出現以下錯誤 createdb 無法聯接到資料庫 postgres 無法聯接到伺服器 沒有那個檔案或目錄伺服器是否在本地執行並且在 unix 域套接字 tmp ...