pg
的内存除了
AllocSet/MemoryContext
外,另一个主要部分就是共享内存(shared memory
)。这一节讨论共享内存(简写shmem
)的分配。
pg
在
reset_shared
()
这个函数里,
计算数据缓冲、xlog
、clog
、共享进程、子事务、并发控制、轻量级锁、backend
进程等需要的共享内存,
调用
shmget()
函数在堆上分配,
用
PGShmemHeader *
类型的
ShmemSegHdr
变量的index
成员指向调用hash_create()
创建的共享内存索引——可扩展
哈希表索引
"ShmemIndex"
;totalSize
成员中记录分配的shmem
大小。
有了共享内存和共享内存索引,再加上一个共享内存锁(关于此锁及pg
中的其它锁,是一个需要很多字才能讨论清楚的点,以后专门讨论),就可以分配共享内存了。
分配共享内存时,先把要分配内存的结构做对齐处理,然后回去共享内存锁,接着判断要分配的内存大小,大于8k
的需要做块对齐,从共享内存的空闲共享内存偏移量处分配所需大小内存,判断所分配内存是否
超过了共享内存的末尾地址,如果超过,释放锁,报错
"out of shared
memory"
,如果没有超过,
释放锁,设置新的
空闲共享内存偏移量,返回分配的共享内存地址。
共享内存分配流程图
到这儿貌似共享内存分配很简单,已经讨论完,其实不然,通常分配共享内存时还需要在共享内存索引表"ShmemIndex"
加一个索引,为了清楚,再把这个索引图放到下面,复习一下。
共享内存及其索引
"ShmemIndex"
结构图
下面举个在shmem
上分配xlog
相关内存的例子,串一下分配的过程。
在
XLOGSHmemInit()
中
分配xlog
相关内存
,初始化控制文件
data/global/pg_control
相关数据结构及事务日志
xlog
相关数据结构,在
XLOGSHmemInit()
函数里,首先在
shmem
的哈希表索引
"ShmemIndex"
上给控制文件
pg_control
增加一个
HashElement
和
ShmemIndexEnt
(
entry
),
在
shmem
里根据
ControlFileData
大小调用
ShmemAlloc()
分配内存空间,使
ShmemIndexEnt
的成员
location
指向该空间,
size
成员记录该空间大小
。
XLOGSHmemInit()
调用
ShmemInitStruct()
,
在其中
调用
hash_search()
在哈希表索引
"ShmemIndex"
中查找
"XLOG
Ctl"
,如果没有,就在
shmemIndex
中给
"XLOG Ctl"
分一个
HashElement
和
ShmemIndexEnt
(
entry
)
,在其中的
Entry
中写上
"XLOG Ctl"
。返回
ShmemInitStruct()
,再调用ShmemAlloc()
在共享内存上给"XLOG Ctl"
相关结构(见下面“
XLog
相关结构图”
)分配空间,设置
entry
(在这儿及ShmemIndexEnt
类型变量)的成员
location
指向该空间,
size
成员记录该空间大小
,
最后返回
XLOGShmemInit()
,让
XLogCtlData *
类型静态
全局变量
XLogCtl
指向在shmem
里给"XLOG Ctl"
相关结构分配的内存地址。
增加了xlog
相关结构在
"ShmemIndex"
中的索引及在共享内存/shmem
中分配了内存的xlog
相关结构对象的结构如下。
增加了xlog
相关机构索引的共享内存索引
"ShmemIndex"
结构图
控制文件结构图
上图中
ControlFileData
结构中的
XLogRecPtr
和
CheckPoint
不是指针,因此应该用右边的相应结构图代替,把这两个合进去有点费劲,将就着看吧。
XLog
相关结构图
- 大小: 44.7 KB
- 大小: 104.9 KB
- 大小: 47.8 KB
- 大小: 145.8 KB
- 大小: 63.5 KB
分享到:
相关推荐
PostgreSQL 的驱动程序类名是 org.postgresql.Driver,数据库 URL 格式是 jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database,其中 database 是数据库名,host 是...
问题链接:https://blog.csdn.net/u011043673/article/details/103099092 在 postgresql 加载timescaledb 时报:could not load library timescaledb-1.4.2.dll The specified procedure could not be found.
一个接口包 连的本地postgresql 表及信息有截图 库自己装 一个vue包 vite+vue3+ts+eleplus 配置了router vuex axios postcss-px-to-viewport界面自适应 env prod环境等 启动:均是 npm i npm start 仅供学习哈 也...
PostgreSQL 是一个功能强大且广泛使用的开源关系数据库管理系统。下面是 PostgreSQL 安装部署手册的摘要信息: 1. 下载安装包 在安装 PostgreSQL 之前,需要下载安装包。用户可以从 PostgreSQL 官方网站下载最新...
【PostgreSQL 12主从集群安装】 在搭建PostgreSQL 12主从集群时,首先需要理解主从复制的概念。主从复制是数据库高可用性的一种常见解决方案,它允许数据从一个节点(主节点)实时同步到另一个或多个节点(从节点)...
1. PostgreSQL的学习心得和知识总结(五十九)|内核级自上而下完美实现PostgreSQL数据库 新增表权限实现列数据无权访问 的实现方案 2. PostgreSQL 14.1 内核
《Greenplum与PostgreSQL数据库驱动详解》 在IT领域,数据库管理系统的高效运作是支撑企业数据处理和服务的核心。本文将深入探讨Greenplum和PostgreSQL两种数据库系统,以及它们对应的驱动包`greenplum-1.0.jar`的...
在IT行业中,数据库是数据存储和管理的核心工具。在Java编程环境下,开发人员常常需要连接不同的数据库系统,如MySQL、SQL Server和PostgreSQL。本文将详细介绍如何使用指定的jar包来建立这些数据库与Java应用程序...
postgresql-9.4.1212驱动, driver=org.postgresql.Driver url=jdbc:postgresql://127.0.0.1:5432/test 配置驱动 url 账户密码等, 创建connector即可连接使用, 亲测可用
Zhparser 是一个 PostgreSQL 的扩展,用于中文的全文搜索。实现了一个中文解析器,基于 SCWS。 标签:zhparser
su -c "/softwares/postgresql/bin/pg_ctl start -D /softwares/postgresql/bin/PGDATA/postgres" postgres 十、配置 Shell 设置 最后,需要配置 Ubuntu 的 Shell 设置,将其从 Dash 更改回 Bash: sudo dpkg-...
schemaspy那篇博客用到的资源
PostgreSQL中国社区资深数据库专家、沃趣科技首席数据库架构师撰写,PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 ...
#vim /home/postgresql/.bash_profile ``` 在文件末尾添加: ```bash PGLIB=/usr/local/pgsql/lib PGDATA=$HOME/data PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANPATH:/usr/local/pgsql/man LD_LIBRARYPATH=$LD_...
Linux 安装 PostgreSQL 是一种常用的数据库管理系统安装方法,本文将指导您一步步地完成 PostgreSQL 的安装。 下载和解压缩 首先,下载 PostgreSQL 的压缩包,并将其上传至 Linux 根目录中。然后,使用 tar 命令来...
PostgreSQL是一款功能强大且全面的开源对象-关系型数据库管理系统(ORDBMS)。它基于加州大学伯克利分校开发的POSTGRES 4.2版本构建而成,引入了许多先进的概念和技术,这些技术在其他商业数据库中往往出现得更晚。...
它允许开发者利用 PostgreSQL 的强大功能,通过浏览器进行应用程序的创建、管理和维护,而无需深入学习复杂的 Web 开发技术。 作为开源软件,pgApex 充分体现了开放源代码的精神,用户可以免费使用、修改和分发其源...
postgresql数据库管理工具,PostgreSQL Maestro是首屈一指的PostgreSQL管理工具,数据库管理,控制和开发。该应用程序还为您提供了一套强大的工具,编辑和执行SQL脚本,构建数字数据的可视化图表,撰写OLAP多维数据...
postgresSQL14-rpm,CentOs7 离线安装 PostgreSQL 14.clip 安装步骤: rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm rpm -ivh postgresql14-contrib-14.12-1PGDG.rhel7.x86_64.rpm rpm -ivh postgresql14-libs-14.12-...
pg_ctl -D /var/postgresql/data -l /var/postgresql/log/pg_server.log start tail -100f /var/postgresql/log/pg_server.log ``` 10. 如果遇到权限问题,可能需要调整数据目录的权限: ``` chmod 700 /var/...