- 博客(5)
- 收藏
- 关注
原创 PostgreSQL启动过程中的那些事七:初始化共享内存和信号九:shmem中初始化Predicate锁
这一节pg初始化predicate锁,支持可序列化事务隔离。通过InitPredicateLocks例程实现,主要是干了下面这么几件事: A创建了哈希表"PREDICATELOCKTARGET hash"。 B在上面的哈希表里增加了ScratchTargetTag结构的索引 C创建了哈希表"PREDICATELOCK hash"。
2012-02-29 21:20:38 2075
原创 PostgreSQL启动过程中的那些事七:初始化共享内存和信号八:shmem中初始化常规锁管理器
这一节pg初始化锁管理器,通过InitLocks例程实现,主要是创建了三个哈希表。第一个哈希表"LOCKhash"用于管理锁,第二个哈希表"PROCLOCKhash"用于管理进程锁,第三个"LOCALLOCKhash"用于管理本地锁信息。其中第一个和第二个哈希表都是共享哈希表,第三个是非关系哈希表。初始化第三个哈希表"LOCALLOCK hash"时在共享内存哈希表索引"ShmemIndex"里没
2012-02-27 20:52:16 3618 2
原创 PostgreSQL的内存管理机制十二:共享内存/shmem分配
pg的内存除了AllocSet/MemoryContext外,另一个主要部分就是共享内存(shared memory)。这一节讨论共享内存(简写shmem)的分配。 pg在reset_shared()这个函数里,计算数据缓冲、xlog、clog、共享进程、子事务、并发控制、轻量级锁、backend进程等需要的共享内存,调用shmget()函数在堆上分配,用PGShmemHeade
2012-02-23 21:46:48 6027
原创 PostgreSQL启动过程中的那些事七:初始化共享内存和信号七:shmem中初始化bufferpool
pg初始化完shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化管理各种事务和事务本身相关结构的实例。然后就是初始化缓冲池(buffer pool)。 缓冲区(buffers)存在于一个空闲内存块列表和一个哈希表查询数据结构。下面简述一下和缓冲池相关的概念。 查找缓冲区(buffer)时必须注意,在I/O开始之前缓冲区必须可用。负责尝试读缓
2012-02-15 20:23:16 1467
原创 PostgreSQL启动过程中的那些事七:初始化共享内存和信号六:shmem中初始化twophase
pg初始化shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化xlog。然后依次初始化clog、subtrans、twophase、multixact。安排按clog、subtrans、multixact、twophase的顺序写,把twophase放到multixact之后是因为前面三个用了相同的算法和数据结构,连起来写可以加深印象和归类记忆。这一篇讨论twophase
2012-02-12 19:31:01 1645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人