`
文章列表
       pg 初始化完 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化管理各种事务和事务本身相关结构的实例。然后就是初始化缓冲池( buffer pool )。        缓冲区 (buffers) 存在于一个空闲内存块列表和一个哈希表查询数据结构。下面简述一下和缓冲池相关的概念。        查找缓冲区( buffer )时必须注意,在 I/O 开始之前缓冲区必须可用。负责尝试读缓冲区的第二个进程会分配自己的复制,这样缓冲池就不一致了。    ...
       pg 初始化 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化 xlog 。然后依次初始化 clog 、 subtrans 、 twophase 、 multixact 。安排按 clog 、 subtrans 、 multixact 、 twophase 的顺序写,把 twopha ...
       pg 初始化 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化 xlog 。然后依次初始化 clog 、 subtrans 、 twophase 、 multixact 。安排按 clog 、 subtrans 、 multixact 、 twophase 的顺序写,把 twophase 放到 multixact 之后是因为前面三个用了相同的算法和数据结构,连起来写可以加深印象和归类记忆,本来想把初始化 clog 、 subtrans 、 multix ...
       pg 初始化 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化 xlog 。然后依次初始化 clog 、 subtrans 、 twophase 、 multixact 。安排按 clog 、 subtrans 、 multixact 、 twophase 的顺序写,把 twophase 放到 multixact 之后是因为前面三个用了相同的算法和数据结构,连起来写可以加深印象和归类记忆,本来想把初始化 clog 、 subtrans 、 multix ...
       pg 初始化完 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化 xlog 。然后依次初始化 clog 、 subtrans 、 twophase 、 multixact 。安排按 clog 、 subtrans 、 multixact 、 twophase 的顺序写,把 twophase 放到 multixact 之后是因为前面三个用了相同的算法和数据结构,连起来写可以加深印象和归类记忆,本来想把初始化 clog 、 subtrans 、 multi ...
        pg 初始化完 shmem ,给其加上索引 "ShmemIndex" 后,接着就在 shmem 里初始化 xlog 。 1 先上个图,看一下函数调用过程梗概,中间略过部分细节 初始化 xlog 方法调用流程图   2 初始化 xlog 相关结构 话说 main()-> … ->PostmasterMain()-> … ->reset_shared() -> CreateSh ...
pg 的内存处理 AllocSet/MemoryContext 外,另一个主要部分就是共享内存shared memory 。这一节讨论共享内存(简写shmem )的初始化及其哈希表索引 "ShmemIndex" 的建立,这是共享内存/shmem 管理的基础。 在 reset_shared () 这个函数里, 计算数据缓冲、xlog 、clog 、共享进程、子事务、并发控制、轻量级锁、backend 进程等需要的共享内存, 调用 shmget() 函数在堆上分配,接着在头部初始化一个 PGShmemHeader * 类型的 ...
 二叉树搜索具有对数时间的表现有个假设:输入数据具有相当的随机性。现在我们看哈希表,这种数据结构,其在插入、删除、查询操作上也具有常数评价时间的表现,而且这种表现以统计为基础,不依赖数据的随机性。   ...
         pg 现在要初始化另一块内存——共享内存 shared memory (以后 shared memory 有时会简写成 shmem ),在这块内存里, pg 存放数据、锁、各种 backend 进程等。 1 先上个图,看一下函数调用过程梗概,中间略过部分细节   初始化共享内存方法调用流程图   2 计算 shared memory 大小 话说 main()-> … ->PostmasterMa ...
  pg 到这儿检查参数 EnableSSL , 如果使能建立 SSL 连接, 就 初始化相关库。 pg 里安全相关的部分基本上是基于 OpenSSL 开发。搞网络安全的人没有不知道 OpenSSL 的,看到 OpenSSL 心中就有数了。国内的 VPN 、网银、安全支付等产品,基本上都是基于 OpenSSL 开发的。如果有兴趣可以先看看关于 OpenSSL 的资料,有本 E 文的书,名字忘了, 162 页左右吧,专门介绍 OpenSSL 的。看之前先认真看两本网络安全的教科书吧,要不然不看晕的人估计没几个。 这片文章是占 ...
  话说 MemoryContextMethods 结构里的函数实现了pg 里AllocSet/MemoryContext 的内存管理机制,定义见下面。 typedef struct MemoryContextMethods {      void    *(*alloc) (MemoryContext context, Size size);      /* call this free_p in case someone #define's free() */      void      ...
  话说 MemoryContextMethods 结构里的函数实现了pg 里AllocSet/MemoryContext 的内存管理机制,定义见下面。 typedef struct MemoryContextMethods {      void    *(*alloc) (MemoryContext context, Size size);      /* call this free_p in case someone #define's free() */      void      ...
  话说初始化完全局时区后,初始化全部的时区。 从默认时区文件 %PostgreSQL Home%\share\timezone\Default 中读、解析世界上按行政区划现有的时区以及这些时区和UTC 的以秒记的时差到 临时 MemoryContext "TZParserMemory" 里的有序tzEntry ** 类型的timezone 数组base 里。然后把base 数组拷贝到 MemoryContext "TopMemoryContext" 里, 使datekn * 类型静态全局变量timezonet ...
  话说初始化和设置完 GUC 参数后,改变了当前工作文件夹,给数据集文件夹加了文件锁 postmaster.pid ,接着就是初始化时区设置,这些都跳过去了,后来发现初始化时区用到了 pg 里的动态哈希表,决定还是把这个写出来。 动态哈希表在 pg 里使用的地方很多, pg 使用它管理共享内存 shared memory 、锁、市区 timezone 等。 Linux 使用哈希表来管理内存、连接等。后面再讨论 pg 里的动态哈希表 dynmaic hashtable 。   1 先上个图,看一下函数调用过程梗概, ...
  话说 MemoryContextMethods 结构里的函数实现了pg 里AllocSet/MemoryContext 的内存管理机制,定义见下面。 typedef struct MemoryContextMethods {      void    *(*alloc) (MemoryContext context, Size size);      /* call this free_p in case someone #define's free() */      void      ...
Global site tag (gtag.js) - Google Analytics