深入理解緩衝區(七)

2021-05-28 13:41:29 字數 1156 閱讀 6968

資料緩衝區塊:位址連續的、多個快取塊的組合。記憶體中真正的資料存放區。緩衝區的組成之一。

快取塊:最小的快取資料塊的快取單位。被資料快取塊包含。

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)

置換策略指示器。注意不要被變數名蒙蔽,和「快取淘汰策略」並沒有直接關係

深入理解緩衝區(九)

4.1.4.3 內外存位址是如何對映的 1 快取對應的內外存的對映關係 typedef struct buftag relfilenode rnode physical relation identifier 資料庫物件的位置標識,具體說明見下 forknumber forknum 可以檢視 rel...

深入理解緩衝區(二)

池,停水曰池。廣韻 所以,池,能蓄積物。引申後,池能蓄積執行緒,則稱之為執行緒池 池能蓄積程序則稱之為程序池。另外常見的還有資料庫連線池 iis6.0 中的位址池 記憶體池 1 等等。其中,記憶體池的概念,類似緩衝區。我這裡討論的,著重於 postgresql 資料庫系統的實現例項。cache 偏於...

深入理解緩衝區(三)

3 快取的作用和常見場景 3.1 快取的作用 快取,可以把常用的一些 物件 暫且稱為物件 蓄積起來,供使用,這樣,將減少被快取物件的生成 銷毀等時間,如果物件被反覆使用,且其生成 銷毀需要花費時間,則快取這樣物件對於時間的節省可能很有效。快取元件提供retrieve add remove等功能。過期...