这一节
pg
初始化进程表,通过
CreateSharedProcArray
例程实现,该例程中初始化的相关结构主要是为了支持维护一个所有活跃backend
进程的PGPROC
结构的未排序数组。
尽管多处用到此数组,但主要是作为确定当前运行进程的事务集合的一种方式。
1
先上个图,看一下函数调用过程梗概,中间略过部分细节
初始化
SharedProcArray
方法调用流程图
2
初始化
xlog
相关结构
话说
main()->
…
->PostmasterMain()->
…
->reset_shared() ->
CreateSharedMemoryAndSemaphores()>
…
->CreateSharedProcArray()
,调用
ShmemInitStruct()
,
在其中
调用
hash_search()
在哈希表索引
"ShmemIndex"
中查找
"Proc
Array
"
,如果没有,就在
shmemIndex
中给
"Proc Array
"
分一个
HashElement
和
ShmemIndexEnt
(
entry
)
,在其中的
Entry
中写上
"Proc Array
"
。返回
ShmemInitStruct()
,再调用
ShmemAlloc()
在共享内存上给
"Proc Array
"
相关结构(见下面“
Proc Array
相关结构图”
)分配空间,设置
entry
(在这儿及ShmemIndexEnt
类型变量)的成员
location
指向该空间,
size
成员记录该空间大小
,
最后返回
InitProcGlobal
()
,让
ProcArrayStruct
*
类型
全局变量
procArray
指向
所分配内存
,设置
PROC_HDR
结构类型的成员值。
相关结构定义见下面:
/* Our shared memory area */
typedef struct ProcArrayStruct
{
int
numProcs;
/* number of valid procs entries */
int
maxProcs;
/* allocated size of procs array */
/*
* Known assigned XIDs handling
*/
int
maxKnownAssignedXids;
/* allocated size of array */
int
numKnownAssignedXids;
/* currrent # of valid entries */
int
tailKnownAssignedXids;
/* index of oldest valid element */
int
headKnownAssignedXids;
/* index of newest element, + 1 */
slock_t
known_assigned_xids_lck;
/* protects head/tail pointers */
/*
* Highest subxid that has been removed from
KnownAssignedXids array to
* prevent overflow; or InvalidTransactionId if
none.
We track this for
* similar reasons to tracking overflowing
cached subxids in PGPROC
* entries.
Must hold exclusive ProcArrayLock to change this, and shared
* lock to read it.
*/
TransactionId
lastOverflowedXid;
/*
* We declare procs[] as 1 entry because C
wants a fixed-size array, but
* actually it is maxProcs entries long.
*/
PGPROC
*procs[1];
/* VARIABLE
LENGTH ARRAY */
} ProcArrayStruct;
static ProcArrayStruct *procArray;
初始化完
ProcArray
相关结构
的共享内存结构图
为了精简上图,把创建
shmem
的哈希表索引
"ShmemIndex"
时创建的
HCTL
结构删掉了,这个结构的作用是记录创建可扩展哈希表的相关信息,不过这个结构在
"ShmemIndex"
创建完成后也会由于出了对象作用域而消失。增加了左边灰色底的部分,描述
共享内存
/shmem
里各变量物理布局概览,由下往上,由低地址到高地址。
图中黄色的索引项就是本节新增加的索引项。
Proc Array
相关结构图
- 大小: 23.5 KB
- 大小: 96.4 KB
- 大小: 460.9 KB
分享到:
相关推荐
nacos-2.0.1 postgresql初始化脚本
赠送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是一个开源的数据库
从零初始化一个SpringBoot项目,集成PostgreSQL并使用JPA和MyBatis两种方式对其进行操作。这里只记录PostgreSQL相关操作,项目创建过程不详细介绍,类似流程可参考文章<<Spring Boot:Idea从零开始初始化后台项目>>...
存储过程 postgresql postgresql存储过程
PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 PostgreSQL数据库是目前功能最强大的开源数据库,它基本上包含其他所有...
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar; 赠送源代码:postgresql-42.2.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
本套程序是在VS2005下C#开发,利用PostgreSQL作为数据库。 本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对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;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
Test-postgresql:积极维护的Test :: postgresql的分支
PostgreSQL12.2中文手册.chm.7z PostgreSQL12.2中文手册.chm.7z
创建 PostgreSQL 实例后,您还需要进行 PostgreSQL 实例的初始化,以轻松启用实例。操作步骤登录 PostgreSQL 控制台,在实例列表,选
NULL 博文链接:https://haige18.iteye.com/blog/1746527
postgresql数据库jdbc驱动,jar包。。。。。。。。。。。。
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。