shared_buffers 是查詢(xún)緩存,設(shè)置比較大可以提高PostgreSQL的效率,一般建議設(shè)置為系統(tǒng)內(nèi)存的3/4,但是必須不少于128KB,并且不少于16KB乘以max_connections
?
做網(wǎng)站、網(wǎng)站設(shè)計(jì)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶(hù)友好,注重用戶(hù)體驗(yàn),一切以用戶(hù)為中心。
shared_buffers該參數(shù)不能超過(guò)由操作系統(tǒng)參數(shù)SHMMAX指定的值
內(nèi)核的 shmall 和 shmmax 參數(shù)設(shè)置在/etc/sysctl.conf文件中,通過(guò)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開(kāi)始,將共享內(nèi)存從system V 修改為Posix和mmap方式,不再需要設(shè)置linux系統(tǒng)的shmmax參數(shù)
如果max_connections設(shè)置太大,信號(hào)量被消耗完畢,有可能會(huì)導(dǎo)致PostgreSQL無(wú)法啟動(dòng)
信號(hào)量控制設(shè)置在/etc/sysctl.conf文件中,通過(guò)sysctl -p 可以生效,該文件用于控制內(nèi)核信號(hào)量,信號(hào)量是System VIPC用于進(jìn)程間通訊的方法。
kernel.sem = 250 512000 100 2048
?
查看當(dāng)前信號(hào)量使用情況
?
cat /proc/sys/kernel/sem
這四個(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ù),用來(lái)操作信號(hào)量)每次調(diào)用鎖能操作的一個(gè)信號(hào)量集中的最大信號(hào)量。
SEMMNI:內(nèi)核中信號(hào)量集的最大數(shù)量。
SEMMNS=SEMMSL*SEMMNI
SEMOPM=SEMMSL,這兩個(gè)參數(shù)一般設(shè)置為相同。
?
對(duì)于PostgreSQL數(shù)據(jù)庫(kù)來(lái)說(shuō):
SEMMNI >= ceil((max_connections + autovacuum_max_workers + 4) / 16)
SEMMSL >= 17
假設(shè)一個(gè)PG庫(kù)如下設(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ù)庫(kù)還是報(bào)同樣的錯(cuò)誤,那么可以重啟操作系統(tǒng)再試試。