PostgreSQL启动过程中的那些事十六:StartDataBase梗概
2012-06-10 20:56
267 查看
这一节到了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
经过细致甚至有些枯燥(这中间我中断了几次就是有这感觉,干这行吗,还是搞清楚了心里踏实。)的准备,激动人心的时刻到了,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
相关文章推荐
- PostgreSQL启动过程中的那些事十六:启动进程一
- PostgreSQL启动过程中的那些事十六:启动进程二
- PostgreSQL启动过程中的那些事十六:启动进程三:CheckPointGuts刷出共享内存里所有数据
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十六:shmem中初始化BgWriter
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号八:shmem中初始化常规锁管理器
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十五:shmem中初始化ProcSignal
- PostgreSQL启动过程中的那些事十五.一:pg_hba.conf的用法
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号五:shmem中初始化multixact 编辑
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十七:shmem中初始化AutoVacuum相关结构
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十二:shmem中初始化SharedBackendStatus
- PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache
- PostgreSQL启动过程中的那些事十九:walwriter进程一
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十四:shmem中初始化PMSignal
- PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
- PostgreSQL启动过程中的那些事一:初始化TopMemoryContext和ErrorContext
- PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十:shmem中初始化PROC索引、辅助进程和信号
- PostgreSQL服务过程中的那些事一:启动postgres服务进程一
- PostgreSQL启动过程中的那些事九_十_十一:初始化活跃backend进程列表、创建opts文件、保持非默认GUC参数文件
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号一:初始化shmemIndex和信号