深入理解緩衝區(九)

2021-05-28 16:49:07 字數 1338 閱讀 6838

4.1.4.3          內外存位址是如何對映的

1 快取對應的內外存的對映關係:

typedef struct buftag

relfilenode rnode;               /* physical relation identifier */ // 資料庫物件的位置標識,具體說明見下

forknumber   forknum;  // 可以檢視「relpathbackend」函式,理解其所起的位址對映作用

blocknumber blocknum;             /* blknum relative to begin of reln */

} buffertag;

2 資料庫、表空間、和物件(主要是表物件)的對應關係,構成了記憶體和資料庫物件的對映。

typedef struct relfilenode

oid                spcnode;        /* tablespace */ //表空間,本身是乙個物理儲存的概念,每個表空間的id與其具體的資料檔案對應,這樣使得快取塊可以和資料檔案對應

oid                dbnode;                /* database */

oid                relnode;         /* relation */

} relfilenode;

在這個結構中,注意,成員relnode,很重要,是資料和資料庫物件對映的重要鏈條。

getnewrelfilenode函式的如下**:

/* generate the oid */

if (pg_class)

rnode.node.relnode = getnewoid(pg_class);

else

rnode.node.relnode = getnewobjectid();

3 資料物件和資料的對映關係:pg_class.h

在pg_class.h檔案中,有一列,資訊如下:

int4         relpages;         /* # of blocks (not always up-to-date) */

標識了本行所表示的物件的具體位置(在資料檔案中的具體位置)。

而pg_class系統表,存放了資料庫物件(表、檢視、序列等)的元資訊,本表隸屬於具體的資料庫(即系統表是區域性的,每個資料庫都有乙份;有的系統表是全域性的,全系統只有乙份如pg_database)。

有了如上三種資訊,即可以串聯起資料庫物件、記憶體(快取)、外存間的對映關係,即可知曉內外存位址是如何對映的了。

深入理解緩衝區(二)

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

深入理解緩衝區(三)

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

深入理解緩衝區(六)

4.1.3.2 從buf分配看buf的使用 bufferalloc函式,當有buf可以被分配時,從緩衝區拿出 空閒 有個freelist結構 的快取塊進行分配,如果緩衝區已經滿,則根據快取淘汰演算法,對快取中的被選中的髒頁進行刷出,然後分配給提出需求者。bufferalloc被呼叫關係 buffer...