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) |
置换策略指示器。注意不要被变量名蒙蔽,和“缓存淘汰策略”并没有直接关系 |