这一节
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
相关结构图
分享到:
相关推荐
nacos-2.0.1 postgresql初始化脚本
PostgreSQL Autovacuum内部结构与调优
赠送jar包:postgresql-42.3.1.jar; 赠送原API文档:postgresql-42.3.1-javadoc.jar; 赠送源代码:postgresql-42.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
赠送jar包:postgresql-42.2.5.jar; 赠送原API文档:postgresql-42.2.5-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库
这里只记录PostgreSQL相关操作,项目创建过程不详细介绍,类似流程可参考文章<<Spring Boot:Idea从零开始初始化后台项目>>(https://blog.csdn.net/lxh_worldpeace/article/details/105544270)。PostgreSQL数据库...
PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 PostgreSQL数据库是目前功能最强大的开源数据库,它基本上包含其他所有...
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar; 赠送源代码:postgresql-42.2.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
存储过程 postgresql postgresql存储过程
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar; 赠送源代码:postgresql-42.3.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.2.6.jar; 赠送原API文档:postgresql-42.2.6-javadoc.jar; 赠送源代码:postgresql-42.2.6-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
该工具可以帮助用户将MySQL的表结构、数据和查询语句转换为适用于PostgreSQL的格式,以便在两个不同的数据库系统之间进行平滑迁移。 这些工具通常提供以下功能: 数据库结构转换:将MySQL的表、列、索引等结构转换...
本套程序是在VS2005下C#开发,利用PostgreSQL作为数据库。 本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL...
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
Python编写PostgreSQL数据库结构比对程序源代码,该源代码导入PyCharm即可运行使用。
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
PostgreSQL与MongoDB处理非结构化数据性能比较
NULL 博文链接:https://haige18.iteye.com/blog/1746527