資料緩衝區塊:位址連續的、多個快取塊的組合。記憶體中真正的資料存放區。緩衝區的組成之一。
快取塊:最小的快取資料塊的快取單位。被資料快取塊包含。
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等功能。過期...