昨天阅读Postgres9.5.3官方文档时,有一句话让我不是很理解:
Smaller values of bgwriter_lru_maxpages and bgwriter_lru_multiplier reduce the extra I/O load caused by the background writer, but make it more likely that server processes will have to issue writes for themselves, delaying interactive queries.
让我产生疑惑的主要是后半句:
that server processes will have to issue writes for themselves, delaying interactive queries.
其大意为,当shared buffer 满的时候,server process 会自己处理 dirty buffer的问题。
同时文档对参数bgwriter_lru_multiplier (floating point),也有如下描述:
Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes.
大意为如果该参数值设置的较小,则会导致server process 自己完成写 dirty buffer 的过程。
关于server process 写 dirty buffer,我突然回想到:除了bgwriter 、checkpoint进程会写 dirty buffer外,backend process (也就是这里的 server process)也会写 dirty buffer,只不过仅仅当buffer不够使用的时候,backend 进程才会写 dirty buffer。
在这里,发下自己对进程结构的理论知识掌握不够到位,于是乎,今天从头到位,简述下PG9.5.3的进程体系吧。
Postgres有哪些后台进程?
postgres@pgdb-> ps -ef|grep postgres
postgres