您好,登錄后才能下訂單哦!
shared_buffers 是查詢緩存,設置比較大可以提高PostgreSQL的效率,一般建議設置為系統內存的3/4,但是必須不少于128KB,并且不少于16KB乘以max_connections
?
shared_buffers該參數不能超過由操作系統參數SHMMAX指定的值
內核的 shmall 和 shmmax 參數設置在/etc/sysctl.conf文件中,通過sysctl -p 可以生效
SHMMAX= 配置了最大的內存segment的大小 ------>這個設置的比SGA_MAX_SIZE大比較好。
SHMMIN= 最小的內存segment的大小
SHMMNI= 整個系統的內存segment的總個數
SHMSEG= 每個進程可以使用的內存segment的最大個數
shmall 是全部允許使用的共享內存大小,shmmax 是單個段允許使用的大小。這兩個可以設置為內存的 90%。例如 16G 內存,1610241024102490% = 15461882265,shmall 的大小為 15461882265/4k(getconf PAGESIZE可得到) = 3774873。
修改 /etc/sysctl.conf
kernel.shmmax=15461882265
kernel.shmall=3774873
kernel.msgmax=65535
kernel.msgmnb=65535
執行 sudo sysctl -p
可以使用 ipcs -l 看結果。ipcs -u 可以看到實際使用的情況
備注:shmmax & shmall 在PostgreSQL9.3開始,將共享內存從system V 修改為Posix和mmap方式,不再需要設置linux系統的shmmax參數
如果max_connections設置太大,信號量被消耗完畢,有可能會導致PostgreSQL無法啟動
信號量控制設置在/etc/sysctl.conf文件中,通過sysctl -p 可以生效,該文件用于控制內核信號量,信號量是System VIPC用于進程間通訊的方法。
kernel.sem = 250 512000 100 2048
?
查看當前信號量使用情況
?
cat /proc/sys/kernel/sem
這四個數字分別是: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=SEMMNIMSMMSL=88250=22000
在/etc/sysctl.conf文件中添加:
kernel.sem=250 22000 250 88
運行:sysctl -p 生效
使配置生效
設置完成之后,如果啟動數據庫還是報同樣的錯誤,那么可以重啟操作系統再試試。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。