標籤:max ova 運行 最大 大數 .net 系統 個數 img
本篇隨筆轉載自https://my.oschina.net/u/2381678/blog/552346。
在生產環境postgresql中,需要調整最大連結數,但是調整後無法啟動
錯誤的意思就是核心中訊號量集和訊號量的配置太小了。訊號量在核心中,主要解決進程間同步、非同步鎖問題,因為PostgreSQL的每個連結是一個進程,所以需要更多的鎖來使用。查看方法:
這四個數字分別是:SEMMSL,SEMMNS,SEMOPM,SEMMNI
SEMMSL:核心參數,控制每個訊號量集合的最大訊號數。
SEMMNS:核心參數,控制系統範圍內能使用的最大訊號量數。
SEMOPM:semop()函數(核心功能,用來操作訊號量)每次調用鎖能操作的一個訊號量集中的最大訊號量。
SEMMNI:核心中訊號量集的最大數量。
SEMMNS=SEMMSL*SEMMNI
SEMOPM=SEMMSL,這兩個參數一般設定為相同。
對於PostgreSQL資料庫來說:
SEMMNI >= ceil((max_connections + autovacuum_max_workers + 4) / 16)
SEMMSL >= 17
假設一個PG庫如下設定:
max_connections=1000, autovacuum_max_workers =3,
則這幾個參數的設定是:
SEMMNI = ceil((1000+3+4))/16)=63,因為考慮到其他進程使用,一般設定為63+25=88
SEMMSL要求大於17,保持預設250
SEMOPM=SEMSL=250
SEMMNS=SEMMNI*MSMMSL=88*250=22000
在/etc/sysctl.conf檔案中添加:
kernel.sem=250 22000 250 88
運行:sysctl -p
使配置生效
設定完成之後,如果啟動資料庫還是報同樣的錯誤,那麼可以重啟作業系統。(具體什麼原因,我也不知道,如果有哪位明白的大神,請賜教)
postgresql設定max_connections太大無法啟動 (轉載)