首頁 > 軟體

postgresql資料庫組態檔postgresql.conf,pg_hba.conf,pg_ident.conf

2023-02-24 06:02:49

PG資料庫管理

組態檔

首先要告訴你的就是這個組態檔正在postgresql資料庫組態檔data目錄下

postgresql.conf

在9.4的版本里引入了一個新的名為postgresql.auto.conf的組態檔,其中設定項會覆蓋postgresql.conf的同名設定項。所以建議不要修改postgresql.conf,而是優先修改postgresql.auto.conf

該檔案中包含一些通用的設定,比如記憶體分配 ,新建database的預設儲存位置,postgresql伺服器的ip地址,紀錄檔以及許多其他設定。

檢視postgresql.conf檢視即可檢視所有設定項內容,無需開啟組態檔。

SELECT
    name,context,unit,setting,boot_val,reset_val
FROM pg_settings
WHERE name IN ('listen_addressed','deadlock_timeout','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem')
ORDER BY context,name;

  • context欄位代表設定項的作用範圍。
  • user表示使用者級設定項,他可以被每個使用者單獨修改,也就是說該設定項針對每個使用者都可以有不同的值,使用者修改後會在自己的所有對談中生效。如果是超級使用者修改了一個user級的設定項,那麼此後連結上的使用者都會將這個修改過的值作為預設值。
  • context值為superuser表示是超級使用者級設定項,只能由超級使用者修改,修改並且重新載入後會在所有使用者對談中生效。非超級使用者不能在自己的對談中修改覆蓋這個值。
  • context值為postmaster表示是整個服務範例級設定項,更改後需要重啟postgresSQL服務才能生效。
  • context為usr和superuser的設定項可以在database級,使用者級,對談級和函數級分別設定。比如說如果會寫很長sql的使用者來說,work_mem引數應該設定大一些;再比如有密集的排序操作,也就可以調大work_mem的值。database級,使用者級,對談級和函數級的引數設定不需要執行重新載入操作。資料庫級的引數設定會在使用者下次連線到該資料庫時生效。對談級和函數級的引數設定立即生效。
  • 我們要注意記憶體相關引數所用的單位。在上圖我們可以看到,記憶體相關引數,有些是8KB有些是KB
  • setting是指當前設定;boot_val是指預設設定;reset_val是指重新啟動伺服器或重新載入設定之後的新設定。修改 了設定後,一定要去檢視setting和reset_val並確保二者是一致的,否則就說明設定並未生效,需要重啟伺服器或者重新載入設定。
  • pg的9.5版本引入了一個新的pg_file_settings檢視,通過該檢視也可以進行設定資訊查詢。查詢該檢視會列出每個設定項所屬的組態檔。其中applied欄位表示該設定項是否已經生效,如果值為f,表示需要重啟伺服器或者重新載入組態檔。如果postgresql.conf和postgresql.auto.conf中存在同名設定,那麼後者會覆蓋前者,並且前者在pg_file_settings中對應的條目會顯示applied欄位為f。
SELECT name,sourcefile,sourceline,setting,applied
FROM pg_file_settings
WHERE name IN ('listen_addresses','deadlock_timeout','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem')
ORDER BY name;

以下幾個設定項需要注意,不然可能導致使用者端無法連線:

  • listen_addresses

表示postgresql服務使用的ip地址,我這裡設定的*,表示使用任意的ip均可連線到POSTgresql資料庫。

  • port

pg庫的偵聽埠,預設值為5432.

  • max_connections

系統允許的最大並行連線數

  • log_destination

定義紀錄檔檔案的輸出格式,預設值是stderr。如果是要記紀錄檔的話切記要講logging_collection設定項設為on。

下面介紹的這些設定項會影響系統的整體效能,其預設值一般不是最優的。建議根據實際情況進行調整。

  • shared_buffers

此設定定義了用於快取最近存取過的資料頁的記憶體區大小,所有使用者對談均可共用此快取區。此設定對查詢速度有著重大影響,一般來說設定的越大越好,至少應該達到系統的總記憶體的25% ,但不適宜超過8GB,因為超過會出現邊際收益遞減效應,即消耗的記憶體很多,但得到的速度提升卻很少,這是得不償失的,意義不大的。

  • effective_cache_size

該設定是一個估算值,表示作業系統分配多少記憶體給PG專用。系統並不會根據這個值來真實地分配這麼多記憶體,但是規劃器會根據這個值來判斷系統是否能提供查詢執行過程所需的記憶體。如果將此值設定的過小,遠遠小於系統的真實可用記憶體量,那麼可能會給規劃器造成誤導,讓規劃器認為系統可用記憶體有限,從而選擇不使用索引而是執行全表掃描(因為使用索引雖然速度快,但需要佔用更多的中間記憶體)。在一臺專用於 執行pgsql資料庫服務的機器上,建議是將effective_cache_size的值設為系統總記憶體的一般或者更多。

  • work_mem

此設定指定了用於執行排序,雜湊關聯,表掃描等操作的最大記憶體大小。要得到此設定的最優值需要考慮以下因素:資料庫的使用方式,需要預留多少記憶體給除資料庫系統外的程式,以及伺服器是否專用於pgsql服務等問題。如果使用場景僅僅是有很多使用者並行執行簡單查詢,那麼這個值可以設得小一點,這樣每個使用者都得以較為公平的使用記憶體,否則第一個使用者就可能會把記憶體佔光。這個值該設多大同樣取決於你的機器總共有多少記憶體可用

  • maintenance_work_mem

此設定指定了可用於vaccum(即清空已標記為“被刪除”狀態的記錄)這類系統內部維護操作的記憶體總量。其值不應大於1GB,此設定的更改可動態生效,執行重新載入既可。

  • max_parallel_workers_per_gather

這是9.6版本新引入的一個設定項,用於控制語句執行的並行度。該設定項決定了執行計劃的每個gather節點中最多允許啟動多少個worker程序並行工作。預設值為0,表示不啟用並行功能。

  • 修改postgresql.conf中設定項的值
ALTER SYSTEM

這是9.4版本之後引入的一個命令,這個命令可以更改設定。


IT145.com E-mail:sddin#qq.com