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 下面的資料夾...