- 浏览: 225354 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenxliang:
2016年10月26、27日,上海浦东,Postgres中国用 ...
PostgreSQL的用户、角色和权限管理 -
gejiod:
最近出了SQL:2011標準,希望樓主也更新下
SQL2008标准 -
lincon77:
太长了,又是E文,要是有些例子可能好理解些
SQL2003标准 -
少主丶无翼:
很谢,找了很久
SQL2003标准 -
zeeeitch:
...
PostgreSQL启动过程中的那些事七:初始化共享内存和信号二十:shmem中初始化堆同步扫描、pg子进程相关结构
PostgreSQL启动过程中的那些事七:初始化共享内存和信号二十:shmem中初始化堆同步扫描、pg子进程相关结构
- 博客分类:
- PostgreSQL内核
这一节 pg 初始化堆扫描同步支持用到的相关结构。
堆扫描同步是当多个进程在同一个表上做顺序扫描( sequential scan ), pg 尝试保持他们同步以减少整体 I/O 需求。这个目标是读每一个页到共享内存仅一次,且使所有参与扫描这个页的进程在这个页被替换出共享内存前处理这个页。
活跃 backend 进程列表,这被用来跟踪 pg 有多少个孩子和在需要的时候给他们发送信号。
1 先上个图,看一下函数调用过程梗概,中间略过部分细节
初始化同步扫描和 Backend 结构数组方法调用流程图
2 初始化同步扫描相关结构
话说 main()-> … ->PostmasterMain()-> … ->reset_shared() -> CreateSharedMemoryAndSemaphores()>…-> SyncScanShmemInit () ,调用 ShmemInitStruct() , 在其中 调用 hash_search() 在哈希表索引 "ShmemIndex" 中查找 " Sync Scan Locations List " ,如果没有,就在 shmemIndex 中给 " Sync Scan Locations List " 分一个 HashElement 和 ShmemIndexEnt ( entry ) ,在其中的 Entry 中写上 " Sync Scan Locations List " 。返回 ShmemInitStruct() ,再调用 ShmemAlloc() 在共享内存上给 " Sync Scan Locations List " 相关结构(见下面“ Sync Scan Locations List 相关结构图” )分配空间,设置 entry (在这儿及ShmemIndexEnt 类型变量)的成员 location 指向该空间, size 成员记录该空间大小 , 最后返回 SyncScanShmemInit () ,让 ss_scan_locations_t * 类型静态 全局变量 scan_locations 指向 所分配内存 ,初始化 ss_scan_locations_t 结构类型的成员值。
接着 main()-> … ->PostmasterMain()-> … ->reset_shared() -> CreateSharedMemoryAndSemaphores() ->…-> ShmemBackendArrayAllocation () , 调用 ShmemAlloc() 在共享内存上分配 2 * MaxBackends 个 Backend 结构数组 见下面“ Backend 结构数组图” ) , 让 Backend * 类型静态 全局变量 ShmemBackendArray 指向 所分配内存 ,用memset 把所分配内存置0 。
相关结构定义和图见下面:
typedef struct ss_scan_location_t
{
RelFileNode relfilenode ; /* identity of a relation */
BlockNumber location ; /* last-reported location in the relation */
} ss_scan_location_t ;
typedef struct ss_lru_item_t
{
struct ss_lru_item_t * prev ;
struct ss_lru_item_t * next ;
ss_scan_location_t location ;
} ss_lru_item_t ;
typedef struct ss_scan_locations_t
{
ss_lru_item_t * head ;
ss_lru_item_t * tail ;
ss_lru_item_t items [1]; /* SYNC_SCAN_NELEM items */
} ss_scan_locations_t ;
#define SizeOfScanLocations (N) offsetof(ss_scan_locations_t, items[N])
/* Pointer to struct in shared memory */
static ss_scan_locations_t *scan_locations;
/* prototypes for internal functions */
static BlockNumber ss_search ( RelFileNode relfilenode,
BlockNumber location, bool set);
typedef struct bkend
{
pid_t pid; /* process id of backend */
long cancel_key; /* cancel key for cancels for this backend */
int child_slot; /* PMChildSlot for this backend, if any */
bool is_autovacuum; /* is it an autovacuum process? */
bool dead_end; /* is it going to send an error and quit? */
Dlelem elem; /* list link in BackendList */
} Backend;
static Backend *ShmemBackendArray;
初始化完 Sync Scan Locations List 相关结构 的共享内存结构图
为了精简上图,把创建 shmem 的哈希表索引 "ShmemIndex" 时创建的 HCTL 结构删掉了,这个结构的作用是记录创建可扩展哈希表的相关信息,不过这个结构在 "ShmemIndex" 创建完成后也会由于出了对象作用域而消失。增加了左边灰色底的部分,描述 共享内存 /shmem 里各变量物理布局概览,由下往上,由低地址到高地址。 图中黄色的索引项就是本节新增加的索引项。
Sync Scan Locations List 相关结构图
Backend 结构数组图
发表评论
-
PostgreSQL服务过程中的那些事三:pg服务进程中的内存上下文
2012-12-31 15:07 1971题外话:年底了,就以这篇博文结束2012 ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询六:执行器执行
2012-11-07 20:13 1771话说 查询“ select c ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
2012-10-31 20:37 1622话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
2012-10-24 19:27 1362话说 查询“ select cname, comp ... -
postgresql 小技巧
2012-10-16 19:36 1298Note : #PostgreSQL and ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询三:获取内存快照
2012-10-16 19:31 1717话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
2012-10-09 19:50 1468话说 查询“ select cname, comp fr ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询一:开启事务
2012-09-25 19:55 1805在《 PostgreSQL 服务过程中的那些事二: ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化
2012-09-18 21:02 1724话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
2012-09-11 19:58 1586话说调用 In ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache
2012-09-04 20:51 1795话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.五:初始化relcache管理环境
2012-08-28 20:47 1255话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程三:初始化relcache管理环境
2012-08-28 20:46 0<!-- [if gte mso 9]><x ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询梗概
2012-08-21 21:04 1197话说客户端发起请求, pg 服务器为该请求启动一个 ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成
2012-08-13 18:50 15243 这节主要讨论 pg 服务进程 pos ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一
2012-08-08 14:42 5627到pg 服务进程了,打算搞一个完整但简单的查询例子,从 ... -
PostgreSQL启动过程中的那些事十九:walwriter进程二
2012-08-03 16:53 13233 这节主要讨论 walwrit ... -
PostgreSQL启动过程中的那些事十九:walwriter进程一
2012-08-01 17:26 1523话说 main()->Po ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程二
2012-07-27 07:25 13843 这节主要讨论 bgwr ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程一
2012-07-23 20:18 1544话说 main()->Postm ...
相关推荐
nacos-2.0.1 postgresql初始化脚本
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
中文手册介绍了如何使用pgAdmin维护PostgreSQL数据库。 pgAdmin支持数据库服务器7.3及以上版本。 对于低于7.3版本的请使用pgAdmin II。
赠送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;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
pgadmin是对POSTGRESQL数据库比较实用的一个可视化工具.方便好用。初学者一学就懂。
自己写的初始化一键安装pg数据库脚本,喜欢的可以拿去用
从零初始化一个SpringBoot项目,集成PostgreSQL并使用JPA和MyBatis两种方式对其进行操作。这里只记录PostgreSQL相关操作,项目创建过程不详细介绍,类似流程可参考文章<<Spring Boot:Idea从零开始初始化后台项目>>...
postgresql数据库jdbc驱动,jar包。。。。。。。。。。。。
存储过程 postgresql postgresql存储过程
NULL 博文链接:https://haige18.iteye.com/blog/1746527
使用Bucardo搭建PostgreSQL数据库双主同步
1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。
PostgreSQL客户端,pgadmin3,安装后,配置连接,便可使用
关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库
pg_ctl start启动时报错退出:pg_ctl:server did not start in time。超时时间是多少?从什么时候到哪个阶段算超时? 二、分析:该信息打印位置,从后面代码段do_start函数中可以看出 1、pg_ctl start调用start_...
PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 PostgreSQL数据库是目前功能最强大的开源数据库,它基本上包含其他所有...
postgresql &pg源码安装编译教程
PostgreSQL9.6.0-CN中文指南 PG DBA必备
在这个场景中,我们将使用Flink CDC来实现MySQL到PostgreSQL的实时数据同步。 首先,我们需要配置源数据库和目标数据库的信息。在MySQL端,我们需要指定要同步的数据库和表,以及MySQL的连接信息。在PostgreSQL端,...