PostgreSQL启动过程中的那些事七:初始化共享内存和信号十七:shmem中初始化AutoVacuum相关结构...

    这一节 pg 初始化 AutoVacuum 系统和进程用到的相关结构,通过 AutoVacuumShmemInit 例程实现 。主要是初始化了一个 AutoVacuumShmemStruct 结构和autovacuum_max_workers 个(默认3 个,可以根据GUC 参数设置) 结构组成的链表,以供 AutoVacuum 相关进程使用。

AutoVacuum 系统架构于两种不同的进程: autovacuum 发起者进程( launcher )和 autovacuum 工作者进程( worker )。发起者进程是一直运行的进程,当 autovacuum GUC 参数设置了时由 postmaster 进程启动。发起者进程在合适的时候调度工作者进程启动。工作者进程是实际执行 vacuum 的进程;发起者进程决定工作者进程连接到数据库且一旦连接他们就检查目录以选择一个表做 vacuum

 

1 先上个图,看一下函数调用过程梗概,中间略过部分细节


初始化 AutoVacuum 方法调用流程图

 

2 初始化 xlog 相关结构

话说 main()->->PostmasterMain()->->reset_shared() -> CreateSharedMemoryAndSemaphores()>-> AutoVacuumShmemInit() ,调用 ShmemInitStruct() , 在其中 调用 hash_search() 在哈希表索引 "ShmemIndex" 中查找 "AutoVacuum Data" ,如果没有,就在 shmemIndex 中给 "AutoVacuum Data" 分一个 HashElementShmemIndexEntentry ) ,在其中的 Entry 中写上 "AutoVacuum Data" 。返回 ShmemInitStruct() ,再调用 ShmemAlloc() 在共享内存上给 "AutoVacuum Data" 相关结构(见下面“ AutoVacuum Data 相关结构图” )分配空间,设置 entry (在这儿及ShmemIndexEnt 类型变量)的成员 location 指向该空间, size 成员记录该空间大小 , 最后返回 AutoVacuumShmemInit () ,让 AutoVacuumShmemStruct * 类型静态 全局变量 AutoVacuumShmem 指向 所分配内存 ,初始化AutoVacuumShmemStruct 结构类型的成员值。

相关结构定义和图见下面:

 

typedef struct WorkerInfoData

{

    SHM_QUEUE   wi_links ;

    Oid         wi_dboid ;

    Oid         wi_tableoid ;

    PGPROC    * wi_proc ;

    TimestampTz wi_launchtime ;

    int         wi_cost_delay ;

    int         wi_cost_limit ;

    int         wi_cost_limit_base ;

}   WorkerInfoData ;

 

typedef struct WorkerInfoData * WorkerInfo ;

 

typedef struct

{

    sig_atomic_t av_signal [ AutoVacNumSignals ];

    pid_t       av_launcherpid ;

    WorkerInfo av_freeWorkers ;

    SHM_QUEUE   av_runningWorkers ;

    WorkerInfo av_startingWorker ;

} AutoVacuumShmemStruct ;

 

static AutoVacuumShmemStruct *AutoVacuumShmem;

 

初始化完 AutoVacuum Data 相关结构 的共享内存结构图

       为了精简上图,把创建 shmem 的哈希表索引 "ShmemIndex" 时创建的 HCTL 结构删掉了,这个结构的作用是记录创建可扩展哈希表的相关信息,不过这个结构在 "ShmemIndex" 创建完成后也会由于出了对象作用域而消失。增加了左边灰色底的部分,描述 共享内存 /shmem 里各变量物理布局概览,由下往上,由低地址到高地址。 图中黄色的索引项就是本节新增加的索引项。

AutoVacuum Data 相关结构图

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值