- 浏览: 230348 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 2053题外话:年底了,就以这篇博文结束2012 ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询六:执行器执行
2012-11-07 20:13 1819话说 查询“ select c ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
2012-10-31 20:37 1719话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
2012-10-24 19:27 1434话说 查询“ select cname, comp ... -
postgresql 小技巧
2012-10-16 19:36 1371Note : #PostgreSQL and ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询三:获取内存快照
2012-10-16 19:31 1756话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
2012-10-09 19:50 1518话说 查询“ select cname, comp fr ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询一:开启事务
2012-09-25 19:55 1874在《 PostgreSQL 服务过程中的那些事二: ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化
2012-09-18 21:02 1796话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
2012-09-11 19:58 1629话说调用 In ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache
2012-09-04 20:51 1845话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.五:初始化relcache管理环境
2012-08-28 20:47 1303话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程三:初始化relcache管理环境
2012-08-28 20:46 0<!-- [if gte mso 9]><x ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询梗概
2012-08-21 21:04 1254话说客户端发起请求, pg 服务器为该请求启动一个 ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成
2012-08-13 18:50 15763 这节主要讨论 pg 服务进程 pos ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一
2012-08-08 14:42 5682到pg 服务进程了,打算搞一个完整但简单的查询例子,从 ... -
PostgreSQL启动过程中的那些事十九:walwriter进程二
2012-08-03 16:53 13793 这节主要讨论 walwrit ... -
PostgreSQL启动过程中的那些事十九:walwriter进程一
2012-08-01 17:26 1606话说 main()->Po ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程二
2012-07-27 07:25 14263 这节主要讨论 bgwr ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程一
2012-07-23 20:18 1629话说 main()->Postm ...
相关推荐
nacos-2.0.1 postgresql初始化脚本
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...
- `src/backend/utils/misc/pg_shmem.c`文件中实现了共享内存的相关功能,这对于多进程之间的通信非常重要。 #### 五、PostgreSQL与MySQL对比 **1. PostgreSQL文件目录组织**: - 整体代码结构清晰,遵循了良好的...
不过,Bucardo 中的同步都是异步的,它是通过触发器记录变化,甚至可以以 PostgreSQL 为源库,可以和 Oracle、MySQL、MongoDB 等很多数据库进行数据异步同步。 二、搭建前准备 在开始搭建 Bucardo 之前,需要满足...
在初始化过程中,initdb会生成一系列的配置文件和数据库模板,并设置默认的最大连接数、共享缓冲区等参数。完成初始化之后,会得到一系列的成功消息,表明数据库系统已经准备就绪。 最后,使用pg_ctl工具来启动...
手册中还会涵盖一些常见的问题和解决方案,帮助用户解决在使用pgAdmin过程中遇到的问题。同时,也会介绍一些数据库性能优化策略,如调整参数设置、使用索引和查询优化等。 总之,这本中文手册全面覆盖了pgAdmin在...
8. **配置和启动**:在PostgreSQL中,你需要在`postgresql.conf`中启用BGWorker,并可能在`pg_hba.conf`中配置权限。然后,重启PostgreSQL服务器以加载新的BGWorker。 在“bgworker-master”这个压缩包中,很可能是...
10. **阅读官方文档**:PostgreSQL 提供详细的官方文档,包括安装、配置和使用指南,强烈建议在安装和使用过程中参考。 **四、安装脚本的使用** 如果你从博主那里获取了安装脚本,通常这是一个包含上述步骤的自动...
Linux 配置 PostgreSQL ...配置 PostgreSQL 数据库需要多个步骤,包括建立 postgres 用户、建立数据库目录、初始化数据库和启动 PostgreSQL。但是,只有通过正确的步骤和安全措施,才能确保数据库的安全和可靠性。
在psql中,虽然没有图形化的断点,但可以通过退出和重新进入存储过程来模拟类似效果。 4. **查看和修改变量** 在存储过程中,可以使用`RAISE NOTICE`语句打印变量值,以便了解程序执行过程中的状态。对于临时修改...
在Linux系统上搭建PostgreSQL、PostGIS和pg_pathman环境是一项关键的任务,这些组件共同构成了一个强大的地理空间数据库解决方案。PostgreSQL是一种开源的关系型数据库管理系统,具有高度的可扩展性和可靠性;...
**pgadmin3-1.10.2:PostgreSQL的可视化宝藏** 在数据库管理的世界里,pgadmin3是一款不可或缺的工具,特别是在与 PostgreSQL 数据库打交道时。标题中的 "pgadmin3-1.10.2" 指的是 pgadmin 的一个特定版本,即...
在这个场景中,我们将使用Flink CDC来实现MySQL到PostgreSQL的实时数据同步。 首先,我们需要配置源数据库和目标数据库的信息。在MySQL端,我们需要指定要同步的数据库和表,以及MySQL的连接信息。在PostgreSQL端,...
- 初始化:`/usr/local/pgsql/postgresql-12.2/bin/initdb -D /usr/local/pgsql/postgresql-12.2/data/` 8. 配置数据库: - 修改`postgresql.conf`以设置监听地址(例如,监听本地IP):`vi /usr/local/pgsql/...
Postgresql存储过程详解 Postgresql存储过程是指在Postgresql数据库中定义的一组SQL语句的...Postgresql存储过程是Postgresql数据库中的一种强大工具,可以实现复杂的操作,提高数据库服务器的性能和应用程序的性能。
5. **初始化数据库**:安装完成后,你需要初始化PostgreSQL数据库集群。使用`initdb`命令,例如: ``` sudo /usr/pgsql-9.6/bin/initdb -D /var/lib/pgsql/9.6/data ``` 这将在指定目录创建数据库集群。 6. **...
安装步骤通常包括解压文件、配置环境变量、初始化数据库集群、安装 PostGIS 扩展以及启动 PostgreSQL 服务。在设置过程中,你需要关注数据目录的位置、端口设置、用户权限等关键参数。 一旦安装完成,你可以使用 ...
PostgreSQL是一种开源的对象关系型数据库管理系统(ORM DBMS),它以其强大的功能、高度的可扩展性和稳定性在全球范围内被广泛使用。版本12.2是PostgreSQL的一个重要版本,提供了许多新特性和性能优化,旨在提升...
为了让系统能够识别PostgreSQL相关的路径和配置,我们需要修改`/etc/profile`文件来添加环境变量。 ##### 操作命令: ```bash vi /etc/profile ``` **需要添加的环境变量:** ```bash export LD_LIBRARY_PATH=/usr...