PostgreSQL启动过程中的那些事十六:StartDataBase梗概

       这一节到了 pg 的高潮, StartupDataBase 启动数据库。

       经过细致甚至有些枯燥(这中间我中断了几次就是有这感觉,干这行吗,还是搞清楚了心里踏实。)的准备,激动人心的时刻到了, pg 要开始“ high ”了, pg 人的原话就是“ We're ready to rock and roll... ”。

       一个 StartupDataBase 方法涉及到的方法数十乃至上百,涉及到的代码有数万行,甚至可以到十万行这个数量级,搞到 word 文档里有几百页,把这些存在复杂逻辑的代码用几页几十页的文档写出来有很大挑战,下面开始讨论吧。

       话说 main()->PostmasterMain()->StartupDataBase() pg 开始加载模板库、启动 XLOG 、验证数据库一致性、根据需要做数据库恢复和创建检查点、启动各辅助进程(后台写进程、 WAL 日志写进程、 AUTOVACUUM 进程、归档进程、统计进程)(这个过程参见“ StartupDataBase 调用流程略图”,这个过程相当的繁冗,为了不至于眼花乃至理不出头绪,就来一个大略的略图。),加上前面的启动的系统日志进程(参见《 pg 启动过程中的那些事十二 . 五:启动系统日志进程 syslogger 》), pg 开始提供服务了, reaper 方法在日志里写一句 database system is ready to accept connections

这中间少了一个生命周期及其短暂的不为大家所熟悉的进程,做了启动 XLOG 、验证数据库一致性、根据需要做数据库恢复和创建检查点等事情( StartupDataBase 调用流程略图中红色框备份),做完这些事情后它就结束了。这个进程就是“启动进程”(“ startup progress ”)。

这几个进程都调用自己相应的函数,组织不同入参,然后调用 postmaster_forkexec 函数,创建一个进程,根据不同的入参在 SubPostmasterMain 函数里走了不同的分支。具体见下图:

 

 

StartupDataBase 调用流程略图


------------
转载请著名出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com

猜你喜欢

转载自beigang.iteye.com/blog/1557971
今日推荐