这一节
pg
初始化
BTree
用到的相关结构,通过
BTreeShmemInit
例程实现
。主要是初始化了一个
BTVacInfo
结构,并使用了面向过程C
语言编程的一个技巧,把这个结构中的固定长度数组
BTOneVacInfo vacuums[1]
扩充成
MaxBackends
个(根据默认值
100
或
GUC
参数的设置得到)的
BTOneVacInfo
结构的数组,以供
BTree
使用。
pg
中相关
BTree
部分实现了
Lehman
和
Yao
的高并发
B-tree
管理算法(
P. Lehman and S. Yao,Efficient Locking for Concurrent Operations on
B-Trees, ACM Transactions on Database Systems, Vol 6, No. 4, December 1981, pp
650-670
)。还用了
Lanin
和
Shasha
论文里所写的删除逻辑的简化版本(
V. Lanin and D. Shasha, A Symmetric
Concurrent B-Tree Algorithm, Proceedings of 1986 Fall Joint Computer
Conference, pp 380-389
)。。
1
先上个图,看一下函数调用过程梗概,中间略过部分细节
初始化
BTree
相关结构方法调用流程图
2
初始化
xlog
相关结构
话说
main()->
…
->PostmasterMain()->
…
->reset_shared() ->
CreateSharedMemoryAndSemaphores()>
…
->
BTreeShmemInit()
,调用
ShmemInitStruct()
,
在其中
调用
hash_search()
在哈希表索引
"ShmemIndex"
中查找
"BTree Vacuum State"
,如果没有,就在
shmemIndex
中给
"BTree Vacuum State"
分一个
HashElement
和
ShmemIndexEnt
(
entry
)
,在其中的
Entry
中写上
"BTree
Vacuum State"
。返回
ShmemInitStruct()
,再调用
ShmemAlloc()
在共享内存上给
"BTree
Vacuum State"
相关结构(见下面“
BTree Vacuum
State
相关结构图”
)分配空间,设置
entry
(在这儿及ShmemIndexEnt
类型变量)的成员
location
指向该空间,
size
成员记录该空间大小
,
最后返回
BTreeShmemInit
()
,让
BTVacInfo
*
类型静态
全局变量
btvacinfo
指向
所分配内存
,初始化BTVacInfo
结构类型的成员值。
相关结构定义和图见下面:
typedef
struct
BTOneVacInfo
{
LockRelId
relid
;
/* global identifier of an index */
BTCycleId
cycleid
;
/* cycle ID for its active VACUUM */
}
BTOneVacInfo
;
typedef
struct
BTVacInfo
{
BTCycleId
cycle_ctr
;
/* cycle ID most recently assigned */
int
num_vacuums
;
/* number of
currently active VACUUMs */
int
max_vacuums
;
/* allocated
length of vacuums[] array */
BTOneVacInfo
vacuums
[1];
/* VARIABLE LENGTH ARRAY */
}
BTVacInfo
;
static
BTVacInfo
*btvacinfo;
初始化完
BTree Vacuum State
相关结构
的共享内存结构图
为了精简上图,把创建
shmem
的哈希表索引
"ShmemIndex"
时创建的
HCTL
结构删掉了,这个结构的作用是记录创建可扩展哈希表的相关信息,不过这个结构在
"ShmemIndex"
创建完成后也会由于出了对象作用域而消失。增加了左边灰色底的部分,描述
共享内存
/shmem
里各变量物理布局概览,由下往上,由低地址到高地址。
图中黄色的索引项就是本节新增加的索引项。
BTree
Vacuum State
相关结构图
- 大小: 12.9 KB
- 大小: 140.3 KB
- 大小: 414.2 KB
分享到:
相关推荐
nacos-2.0.1 postgresql初始化脚本
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
赠送jar包:postgresql-42.3.1.jar; 赠送原API文档:postgresql-42.3.1-javadoc.jar; 赠送源代码:postgresql-42.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送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数据库是目前功能最强大的开源数据库,它基本上包含其他所有...
存储过程 postgresql postgresql存储过程
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar; 赠送源代码:postgresql-42.2.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
赠送jar包:postgresql-42.2.6.jar; 赠送原API文档:postgresql-42.2.6-javadoc.jar; 赠送源代码:postgresql-42.2.6-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar; 赠送源代码:postgresql-42.3.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
该工具可以帮助用户将MySQL的表结构、数据和查询语句转换为适用于PostgreSQL的格式,以便在两个不同的数据库系统之间进行平滑迁移。 这些工具通常提供以下功能: 数据库结构转换:将MySQL的表、列、索引等结构转换...
本文档详细介绍了在 Windows(包括 Win7)下安装和配置 PostgreSQL 的步骤,包括下载和安装、设置环境变量、初始化数据库、启动和停止数据库、新建数据库和用户、连接数据库、设置 Windows 服务等。
本套程序是在VS2005下C#开发,利用PostgreSQL作为数据库。 本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL...
initdb 命令用于初始化一个 PostgreSQL 数据库簇。可以使用以下命令初始化数据库簇: `initdb [options]... [DATADIR]` 其中,options 是可选的参数,DATADIR 是数据库簇的位置。常用的选项包括: * `-D`, `--...
PostgreSQL 和 MS SQL Server 在过程语言中的差异主要体现在数据类型、变量定义与赋值、IF/ELSE 控制结构等方面。了解这些差异对开发者来说非常重要,可以帮助他们更好地选择和使用合适的数据库管理系统。
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
Python编写PostgreSQL数据库结构比对程序源代码,该源代码导入PyCharm即可运行使用。