PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成

3

这节主要讨论 pg 服务进程 postgres 进程到了 PostgresMain 所有后台进程,交互或其它进程从这儿开始。

进入 PostgresMain 后,解析客户端命令行参数 dbname ;做文件、存储、缓存的初始化;设置合适的信号处理句柄;调用 InitPostgres 方法给 portgres 服务进程做相关初始化,这个方法里初始化了 relcache catcache ,初始化了执行查询计划的 portal 的管理器,填充本进程 PGPROC 结构相关部分成员等,这个方法做的事情较多并值得花点精力,后面单列一个主题讨论;删除 内存上下文 PostmasterContext (删除内存上下文的方法参见《 PostgresSQL 内存管理机制三: memcontext 删除》) ;判断当前进程是否 walsender 进程,如果不是, 创建内存上下文 "MessageContext" (创建内存上下文的方法参见《 PostgresSQL 内存管理机制三: AllocSet/MemoryContext 内存分配 》) ;任何,设置 错误跳跃重启点。然后进入无限循环,检查并处理任何请求或者最近收到的信号。 然后再接着循环。

进入无限循环后,切换到内存上下文 "MessageContext" 并清理干净该内存上下文;读取客户端命令;根据客户端各种命令分别进行处理。客户端命令分 Q P B E F C D H S X EOF d c f 这么多种,具体见“ PostgresMain 方法流程图”,有几种命令我也不确定对应什么 SQL 命令或操作,以后遇到再求证。

 

 

 

 

PostgresMain 方法的调用序列图

 

下面时 PostgresMain 流程图



 

PostgresMain 方法的流程图

 

 

后面根据一个简例简论简单查询分支,例子要是复杂点相应的解析树、查询树、计划树的图就大的看起来令人眼花缭乱。用这个例子走一边会把数据库系统实现中的编译器、分析器、优化器、执行器等几个数据库重要功能模块过一遍。





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

猜你喜欢

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