PG内核分析 Q&A (8)

RelCache中存放的不是元组, 而是RelationData数据结构(数据结构3.13),
每一个RelationData结构表示一个表的模式信息,这些信息都由系统表元组中的信息构造而来.

两种Cache(SysCache和RelCache)是所有进程共享的吗

不是.

值得注意的是,
两种Cache都不是所有进程共享的,每一个PG进程都维护着自己的SysCache和RelCache.

即: 在PG中, 每一个进程都有属于自己的Cache.

换句话说,
同一个系统表在不同的进程中都有对应的Cache来缓存它的元组(对于RelCache来说缓存的是一个RelationData结构).

说说SysCache

系统表元组Cache(SysCache).

SysCache中存放的是最近使用过的系统表的元组.

说明RelCache

表模式信息Cache(RelCache).

RelCache中包含所有最近访问过的表的模式信息(包含系统表的信息).

RelCache存放的不是元组, 而是RelationData数据结构(数据结构3.13),
每一个RelationData结构表示一个表的模式信息,
这些信息都由系统表元组中的信息构造而来.

注: 两种Cache都不是所有进程共享的,
每一个PG的进程都维护着自己的SysCache和RelCache.

两者的区别

对RelCache的管理比SysCache要简单许多,原因在于大多数时候RelCache中存储的RelationData的结构是不变的,因此PG仅用一个Hash表来维持这样一个结构.

对RelCache的查找,插入,删除,修改等操作也非常简单

两者的类似

和SysCache的初始化类似, RelCache的初始化同样也在InitPostgres函数中进行,
同样分为两个阶段: RelationCacheInitialize 和 RelationCacheInitializePhase2.

3.3.3 缓冲池管理

如果需要访问的系统表在Cache中无法找到或者需要访问普通表的元组,
就需要对缓冲池进行访问. 任何对于表,元组,索引表等的操作都在缓冲池中进行,
缓冲池的数据调度都以磁盘块为单位,
需要访问的数据以磁盘块为单位调用函数smgrread写入缓冲池,
而smgrwrite将缓冲池数据写回到磁盘.

调入缓冲池中的磁盘块称为缓冲区, 缓冲块或者页面, 多个缓冲区组成了缓冲池.

缓冲池管理模块的主要结构如下图.

PG内核分析 Q&A

有了高速缓冲(Cache),为什么还要缓冲池

如果需要访问的系统表元组在Cache中无法找到或者需要访问普通表的元组,
就需要对缓冲池进行访问.

任何对于表,元组,索引表等的操作都在缓冲池中进行,缓冲池的数据调度都以磁盘块为单位,需要访问的数据以磁盘块为单位调用函数smgrread写入缓冲池,而smgrread将缓冲池数据写回到磁盘.调入缓冲池池中的磁盘块称为缓冲区,缓冲块或者页面,多个缓冲区组成了缓冲池.

共享缓冲区为什么采取了静态方式 *****

为了便于实现, PG对共享缓冲区的管理采取了静态方式:
它在系统配置时规定好了共享缓冲区的总数(1000个, 由全局变量NBuffers定义),
以后在每次系统启动时,
由Postmaster或某一独立的Postgres从共享内存中分配一片空间作共享缓冲区,
全部(共享)缓冲区构成共享缓冲池.

缓冲池管理主要有几块内容

主要有4块:

初始化共享缓冲池

共享缓冲区查询

共享缓冲区替换策略

本地缓冲池管理

3.3.4 IPC 什么是IPC

IPC(进程间通信, Inter-Process
Communication)是指至少两个或者两个以上的进程交换数据或信号的技术或者方法.

由于进程是操作系统分配资源的最小单位, 每个进程都有自己独立的一套系统资源,
不同进程之间的资源是相互隔离的.

为了使不同进程之间能够互相访问资源并且进行协同工作, 操作系统提供了IPC机制.

广义上的IPC不仅可以使用同一计算上的多个进程进行通信,
而且可以使不同计算机上的多个进程进行通信,
但PG中的IPC只考虑同一计算机上的进程间通信.

操作系统为什么要提供IPC

为了使不同进程之间能够互相访问资源并且协同工作, 操作系统提供了IPC机制.

PG中的IPC有什么不同

广义上的IPC不仅可以使用同一计算上的多个进程进行通信,
而且可以使不同计算机上的多个进程进行通信,
但PG中的IPC只考虑同一计算机上的进程间通信.

IPC的实现方法有哪些

IPC有多种实现方法, 包括文件, Socket, 共享内存等.

PG中的IPC主要采用共享内存的方式来实现,
即在系统中开辟一片所有进程都可以读写的内存空间,
并约定好进程读写这片内存的时机和方式,
这样进程之间就可以通过这片共享内存来交换数据.

PG中的IPC额外还提供了哪些功能

在共享内存的基础上, PG的IPC机制还提供了以下功能:

进程和Postermaster的通信机制

统一管理进程的相关变量和函数

提供了SI Message机制, 即无效消息传递机制.

有关清除的函数.

IPC模块主要分几部分内容

共3部分:

共享内存管理

SI Message

其他

3.4 表操作与元组操作 3.4.1 表操作 3.4.2 元组操作 3.5 VACUUM机制 为什么需要Vacuum机制

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysxsx.html