启动服务以后,在有无客户端连接的进程对比
上半部分是没有psql连接时的进程状态,下半部分是连接一个psql时候的进程状态。通过对比可以发现,当有客户端连接的时候,启动一个postgres进程。同理,当再增加一个客户端连接的时候,也再起一个postgres进程。
守护进程postmaster
数据库服务的主控制进程,负责整个系统的开启和关闭,在其他服务进程发生错误时完成系统恢复,当有客户端请求时,fork一个postgres进程。如上图,增加一个psql连接以后,增加一个postgres进程。
守护进程入口函数postmaste.c
void PostmasterMain(int argc, char *argv[])
3. checkpointer进程
检查点进程,各种类型的检查点实现。检查的作用主要是缩短数据库恢复的时间。
checkpointer进程入口,checkpointer.c
void CheckpointerMain(void)
4. writer进程
writer进程在适当的时间,将共享内存上的缓存写入磁盘。
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. 完