启动服务之后,在有无客户端链接的进程对比sql
上半部分是没有psql链接时的进程状态,下半部分是链接一个psql时候的进程状态。经过对比能够发现,当有客户端链接的时候,启动一个postgres进程。同理,当再增长一个客户端链接的时候,也再起一个postgres进程。数据库
守护进程postmaster缓存
数据库服务的主控制进程,负责整个系统的开启和关闭,在其余服务进程发生错误时完成系统恢复,当有客户端请求时,fork一个postgres进程。如上图,增长一个psql链接之后,增长一个postgres进程。函数
守护进程入口函数postmaste.cpost
void PostmasterMain(int argc, char *argv[])
3. checkpointer进程日志
检查点进程,各类类型的检查点实现。检查的做用主要是缩短数据库恢复的时间。code
checkpointer进程入口,checkpointer.c进程
void CheckpointerMain(void)
4. writer进程内存
writer进程在适当的时间,将共享内存上的缓存写入磁盘。it
writer进程入口,bgwriter.c
void BackgroundWriterMain(void)
5. wal writer进程
预写日志进程,一种比较高效的日志模式,在数据库进行操做是,先将数据写入到日志文件,而后再写入数据库,因为 是顺序写,效率比通常的日志模式快。相似的,SQLite也有WAL模式。
wal writer进程入口,Walwriter.c
void WalWriterMain(void)
6. autovacuum 进程
执行自动vacuum任务。
autovacuum进程入口,autovacuum.c
NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[])
7. stats colletcor进程
统计信息收集进程,收集表的访问次数,磁盘的访问次数等信息。
8. 完