4.1.4 Buf结构
缓冲区:一块地址连续的空间,分为几种类型的缓冲区(元信息块、数据缓冲区块、其他信息块)
数据缓冲区块:地址连续的、多个缓存块的组合。内存中真正的数据存放区。缓冲区的组成之一。
缓存块:最小的缓存数据块的缓存单位。被数据缓存块包含。
4.1.4.1 Buf的整体结构
在src/backend/storage/buffer/buf_init.c中有InitBufferPool函数,描述了基本的buf结构:
void
InitBufferPool(void)
{
bool foundBufs,
foundDescs;
BufferDescriptors = (BufferDesc *)
ShmemInitStruct("Buffer Descriptors",
NBuffers * sizeof(BufferDesc), &foundDescs);
BufferBlocks = (char *)
ShmemInitStruct("Buffer Blocks",
NBuffers * (Size) BLCKSZ, &foundBufs);
……// 略去其他代码
/* Init other shared buffer-management stuff */
StrategyInitialize(!foundDescs);
}
|
变量名称 |
空间大小 |
功能 |
|
BufferDescriptors |
NBuffers * sizeof(BufferDesc) |
缓冲区的元信息,表述数据库缓冲区分配出去的缓存块等的使用情况 |
|
BufferBlocks |
NBuffers * (Size) BLCKSZ |
形式上是“char *”,本质上是内存开辟出的一块地址连续的区域 |
|
SharedBufHash |
NBuffers + NUM_BUFFER_PARTITIONS |
为便于搜索buf的一个hash结构 |
|
StrategyControl |
sizeof(BufferStrategyControl) |
置换策略指示器。注意不要被变量名蒙蔽,和“缓存淘汰策略”并没有直接关系 |
理解数据库缓冲区结构与管理
本文深入探讨了数据库缓冲区的组成与管理机制,详细介绍了缓冲区的元信息、数据缓冲区块、缓存块等内容,并通过源代码解析展示了初始化缓冲池的过程。理解这些核心概念对于优化数据库性能至关重要。
8万+

被折叠的 条评论
为什么被折叠?



