Postgresql日誌系統的實現(五)

2021-07-28 11:08:57 字數 1632 閱讀 6324

1.3.1

.3 xlog

其他資訊

資源資料結構:

在xlog_internal.h中定義了乙個結構體,resource manager可以呼叫某種資源(rmgrdata代表的資源)的某個方法(redo,undo等)。這裡的資源可以簡單的理解成pg中存在這些**,在pg執行時,系統中就生成了這些可利用的資源。例如(hash,btree,heap等等)。

typedef struct rmgrdata

rmgrdata;

說明:函式表提供了不同物件可進行的同恢復相關的操作,但不是所有可恢復的物件都需要做「startup、cleanup」等操作,這個因物件而異。

資源呼叫結構體陣列:

在rmgr.c中定義了乙個rmgrdata型別的結構體陣列rmgrtable,指明在pg中可以使用的各種資源,如xlog,transaction,storage等等。這個資訊在pg8.x較以前有了新的擴充套件(多了乙個「heap2」)。

const rmgrdatarmgrtable[rm_max_id + 1] = , ,

, ,

, ,

,,//備用

,//備用

, ,

, ,

, ,

}; 在「startupxlog」方法中,首先做一些準備工作,然後在迴圈中持續根據xlog檔案中的記錄型別分別呼叫日誌記錄型別對應的資源的方法「***rodo」來完成恢復任務,**為「rmgrtable

[record->xl_rmid].rm_redo(endrecptr, record);」。可以從這裡看出資料庫的恢復需要在不同的層次結構上進行。例如:需要進行事務恢復,儲存恢復,資料庫恢復,表空間恢復,索引恢復等等。

選擇rmgrtable陣列中的哪個資料項,通過以rmgrid為陣列下標來確定。被引用時只需指定rmgrid的值,就能引用相應的函式。例如:rmgrtable[1]表示進行事務恢復。

rmgrtable[i]

的i值定義如下(

rmgrid

標識了可以保證恢復的資源,目前pg8.x版本包括如下資源可以管理:):

#define rm_xlog_id0

#define rm_xact_id1

#define rm_smgr_id2

#define rm_clog_id3

#define rm_dbase_id4

#define rm_tblspc_id5

#define rm_multixact_id6

#define rm_heap2_id9

#define rm_heap_id10

#define rm_btree_id11

#define rm_hash_id12

#define rm_gin_id13

#define rm_gist_id14

#define rm_seq_id15

#define rm_max_id

rm_seq_id

這些資訊,對應了

pg可以支援的恢復的物件內容,具體資訊參見「

rmgrtable

」中的定義的函式。

Postgresql日誌系統的實現(七)

1.3.2 2主要函式分析 xloginsert 的執行步驟 功能 插入一條xlog記錄,記錄有特殊的rmid標識和附帶資訊位元組,記錄的主體包括資料塊和資料鏈。返回xlog指標 指向記錄尾的 可以用做已經存入日誌的資料頁的lsn,根據lsn,xlog在修改實際資料之前先寫日誌 也就是wal 執行步...

PostgreSQL的日誌型別

剛開始學習postgres的時候,可能對postgresql中的日誌概念比較模糊,到底有多少種日誌,哪些日誌是能刪除的,各自又記錄什麼樣的功能。postgresql中有三種日誌,pg log,pg xlog和pg clog。一.安裝路徑 這三種資料庫後兩者一般的安裝路徑是 pgdata 下面的資料夾...

PostgreSQL的日誌型別

剛開始學習postgres的時候,可能對postgresql中的日誌概念比較模糊,到底有多少種日誌,哪些日誌是能刪除的,各自又記錄什麼樣的功能。postgresql中有三種日誌,pg log,pg xlog和pg clog。一.安裝路徑 這三種資料庫後兩者一般的安裝路徑是 pgdata 下面的資料夾...