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...