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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值