PostgreSQL 源码分析

2016-08-24 Wednesday     database , postgresql , linux

Backend

postmaster

通常这个是执行 postgres 默认启动的程序,真正的入口在 main 目录下。

PG 启动后 postmaster 进入无限循环,等待客户端请求并为之提供服务,通过 select 定期检查是否有客户端服务请求,如果没有则继续循环,有就创建一个 postgres 子进程为其提供服务。

PostmasterMain()
 |-AllocSetContextCreate()               # 初始化内存上下文
 |-InitializeGUCOptions()                # 初始化GUC
 |-SelectConfigFiles()                   # 查找PGDATA目录,加载配置文件
 | |-ProcessConfigFile()
 |   |-ProcessConfigFileInternal()
 |     |-ParseConfigFile()               # 这个是通过flex生成的文件
 |       |-ParseConfigFp()
 |
 |-SysLogger_Start()                     # 启动日志收集进程
 |
 |-StartupDataBase()                     # 各种启动进程实际都是宏定义
 | |-StartChildProcess(StartupProcess)   # 启动startup进程
 |   |-AuxiliaryProcessMain()            # 包括walwriter, walreceiver等进程的入口函数
 |     |-StartupProcessMain()            # startup进程入口
 |       |-StartupXLOG()
 |
 |-ServerLoop()
   |-select()
   |-ConnCreate()
   |-BackendStartup()                    # 启动一个服务进程
   | |-fork_process()
   | |-InitPostmasterChild()             # 子进程
   | |-ClosePostmasterPorts()
   | |-BackendInitialize()
   | |-BackendRun()
   |   |-PostgresMain()
   |
   |-StreamClose()
   |-ConnFree()


如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2019 – Jin Yang