溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL--信號(hào)量和shmall 和 shmmax相關(guān)設(shè)置

發(fā)布時(shí)間:2020-07-08 09:55:52 來源:網(wǎng)絡(luò) 閱讀:5260 作者:朱飛東 欄目:MySQL數(shù)據(jù)庫

一、shared_buffers與shmmax,shmall,max_connections的關(guān)系

1.1、shared_buffers與max_connections的關(guān)系

shared_buffers 是查詢緩存,設(shè)置比較大可以提高PostgreSQL的效率,一般建議設(shè)置為系統(tǒng)內(nèi)存的3/4,但是必須不少于128KB,并且不少于16KB乘以max_connections
?

1.2、shared_buffers與shmmax,shmall的關(guān)系

shared_buffers該參數(shù)不能超過由操作系統(tǒng)參數(shù)SHMMAX指定的值

內(nèi)核的 shmall 和 shmmax 參數(shù)設(shè)置在/etc/sysctl.conf文件中,通過sysctl -p 可以生效

SHMMAX= 配置了最大的內(nèi)存segment的大小 ------>這個(gè)設(shè)置的比SGA_MAX_SIZE大比較好。

SHMMIN= 最小的內(nèi)存segment的大小

SHMMNI= 整個(gè)系統(tǒng)的內(nèi)存segment的總個(gè)數(shù)

SHMSEG= 每個(gè)進(jìn)程可以使用的內(nèi)存segment的最大個(gè)數(shù)

shmall 是全部允許使用的共享內(nèi)存大小,shmmax 是單個(gè)段允許使用的大小。這兩個(gè)可以設(shè)置為內(nèi)存的 90%。例如 16G 內(nèi)存,1610241024102490% = 15461882265,shmall 的大小為 15461882265/4k(getconf PAGESIZE可得到) = 3774873。
修改 /etc/sysctl.conf
kernel.shmmax=15461882265
kernel.shmall=3774873
kernel.msgmax=65535
kernel.msgmnb=65535
執(zhí)行 sudo sysctl -p
可以使用 ipcs -l 看結(jié)果。ipcs -u 可以看到實(shí)際使用的情況

備注:shmmax & shmall 在PostgreSQL9.3開始,將共享內(nèi)存從system V 修改為Posix和mmap方式,不再需要設(shè)置linux系統(tǒng)的shmmax參數(shù)

二、max_connections與信號(hào)量的關(guān)系

如果max_connections設(shè)置太大,信號(hào)量被消耗完畢,有可能會(huì)導(dǎo)致PostgreSQL無法啟動(dòng)

2.1、信號(hào)量設(shè)置

信號(hào)量控制設(shè)置在/etc/sysctl.conf文件中,通過sysctl -p 可以生效,該文件用于控制內(nèi)核信號(hào)量,信號(hào)量是System VIPC用于進(jìn)程間通訊的方法。

kernel.sem = 250 512000 100 2048

?

2.2、查詢當(dāng)前信號(hào)量使用情況

查看當(dāng)前信號(hào)量使用情況
PostgreSQL--信號(hào)量和shmall 和 shmmax相關(guān)設(shè)置
?

2.3、查看當(dāng)前的設(shè)置:

cat /proc/sys/kernel/sem
PostgreSQL--信號(hào)量和shmall 和 shmmax相關(guān)設(shè)置
這四個(gè)數(shù)字分別是:SEMMSL,SEMMNS,SEMOPM,SEMMNI
SEMMSL:內(nèi)核參數(shù),控制每個(gè)信號(hào)量集合的最大信號(hào)數(shù)。
SEMMNS:內(nèi)核參數(shù),控制系統(tǒng)范圍內(nèi)能使用的最大信號(hào)量數(shù)。
SEMOPM:semop()函數(shù)(內(nèi)核函數(shù),用來操作信號(hào)量)每次調(diào)用鎖能操作的一個(gè)信號(hào)量集中的最大信號(hào)量。
SEMMNI:內(nèi)核中信號(hào)量集的最大數(shù)量。
SEMMNS=SEMMSL*SEMMNI
SEMOPM=SEMMSL,這兩個(gè)參數(shù)一般設(shè)置為相同。
?

2.4、信號(hào)量設(shè)置計(jì)算

對(duì)于PostgreSQL數(shù)據(jù)庫來說:
SEMMNI >= ceil((max_connections + autovacuum_max_workers + 4) / 16)
SEMMSL >= 17
假設(shè)一個(gè)PG庫如下設(shè)置:
max_connections=1000, autovacuum_max_workers =3,
則這幾個(gè)參數(shù)的設(shè)置是:
SEMMNI = ceil((1000+3+4))/16)=63,因?yàn)榭紤]到其他進(jìn)程使用,一般設(shè)置為63+25=88
SEMMSL要求大于17,保持默認(rèn)250
SEMOPM=SEMSL=250
SEMMNS=SEMMNIMSMMSL=88250=22000
在/etc/sysctl.conf文件中添加:

kernel.sem=250  22000 250  88
運(yùn)行:sysctl -p   生效 

使配置生效
設(shè)置完成之后,如果啟動(dòng)數(shù)據(jù)庫還是報(bào)同樣的錯(cuò)誤,那么可以重啟操作系統(tǒng)再試試。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI