1. 前言
本文是《【0264】深入分析relcache(relation descriptor cache)缓存初始化第2阶段》 的前传。在该文中,我们得知PG内核初始化relcache时,一共有三个阶段:
- 阶段(1)
RelationCacheInitialize() - 阶段(2)
RelationCacheInitializePhase2() - 阶段(3)
RelationCacheInitializePhase3()
本文主要内容将详细讲解PG内核中初始化relcache时,其第一阶段主要负责完成的任务是什么? 以及该阶段完成了什么功能。
对于第一阶段:
这将初始化关系表描述符缓存。在调用这个函数的时候,我们还不能访问数据库(主要是因为事务子系统还没有启动);我们所做的就是创建一个空的缓存哈希表。这必须在开始初始化事务之前完成,否则如果事务在我们可以设置relcache之前终止,AtEOXact_RelationCache()
会崩溃。
2. relcache第一阶段初始化
relcache缓存第一阶段初始化过程由函数RelationCacheInitialize()完成。该函数的源码如下&#