`

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" 分一个 HashElement ShmemIndexEnt entry ,在其中的 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 相关结构图

 

 

1
0
分享到:
评论

相关推荐

    nacos-2.0.1 postgresql初始化脚本

    nacos-2.0.1 postgresql初始化脚本

    PostgreSQL Autovacuum内部结构与调优

    PostgreSQL Autovacuum内部结构与调优

    postgresql-42.3.1-API文档-中文版.zip

    赠送jar包:postgresql-42.3.1.jar; 赠送原API文档:postgresql-42.3.1-javadoc.jar; 赠送源代码:postgresql-42.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    PostgreSQL中文手册9.2

    一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...

    postgresql-42.2.5-API文档-中英对照版.zip

    赠送jar包:postgresql-42.2.5.jar; 赠送原API文档:postgresql-42.2.5-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    关于PostGreSQL中的存储过程

    关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库

    SpringBoot2.2.8集成PostgreSQL12 JPA MyBatis

    这里只记录PostgreSQL相关操作,项目创建过程不详细介绍,类似流程可参考文章<<Spring Boot:Idea从零开始初始化后台项目>>(https://blog.csdn.net/lxh_worldpeace/article/details/105544270)。PostgreSQL数据库...

    PostgreSQL修炼之道:从小工到专家

    PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 PostgreSQL数据库是目前功能最强大的开源数据库,它基本上包含其他所有...

    postgresql-42.2.2-API文档-中文版.zip

    赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar; 赠送源代码:postgresql-42.2.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Postgresql存储过程

    存储过程 postgresql postgresql存储过程

    postgresql-42.2.2-API文档-中英对照版.zip

    赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    postgresql-42.3.3-API文档-中文版.zip

    赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar; 赠送源代码:postgresql-42.3.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    postgresql-42.2.6-API文档-中文版.zip

    赠送jar包:postgresql-42.2.6.jar; 赠送原API文档:postgresql-42.2.6-javadoc.jar; 赠送源代码:postgresql-42.2.6-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    mysql转换postgresql工具

    该工具可以帮助用户将MySQL的表结构、数据和查询语句转换为适用于PostgreSQL的格式,以便在两个不同的数据库系统之间进行平滑迁移。 这些工具通常提供以下功能: 数据库结构转换:将MySQL的表、列、索引等结构转换...

    一套C#与PostgreSQL数据库完美结合的实例

    本套程序是在VS2005下C#开发,利用PostgreSQL作为数据库。 本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL...

    postgresql-42.3.3-API文档-中英对照版.zip

    赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    Python编写PostgreSQL数据库结构比对程序源代码

    Python编写PostgreSQL数据库结构比对程序源代码,该源代码导入PyCharm即可运行使用。

    PostgreSQL 14.1 中文手册

    PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组

    PostgreSQL与MongoDB处理非结构化数据性能比较.pdf

    PostgreSQL与MongoDB处理非结构化数据性能比较

    PostgreSQL 存储过程调试

    NULL 博文链接:https://haige18.iteye.com/blog/1746527

Global site tag (gtag.js) - Google Analytics