根據預寫式日誌wal的定義,資料庫在修改磁碟上的元組前,必須先將日誌記錄刷回到磁碟。xlog的組織形式如下,依次為日誌記錄頭,日誌型別(事務操作日誌、事務提交或終止日誌或是檢查點日誌等)、備份檔案塊描述資訊以及備份檔案塊資料。資料庫系統把各種需要記錄日誌的資料分類,分配給與他們對應的資源管理器號,系統在恢復或者讀取日誌記錄時,能夠通過資源管理器號和日誌頭資訊中的xl_info欄位(高4位),知道資料庫對源資料做了哪種操作,從而正確的呼叫相應的響應函式(如redo函式等)。
pg_rmgr(rm_xlog_id, "xlog", xlog_redo, xlog_desc, null, null)
pg_rmgr(rm_xact_id, "transaction", xact_redo, xact_desc, null, null)
pg_rmgr(rm_smgr_id, "storage", smgr_redo, smgr_desc, null, null)
pg_rmgr(rm_clog_id, "clog", clog_redo, clog_desc, null, null)
pg_rmgr(rm_dbase_id, "database", dbase_redo, dbase_desc, null, null)
pg_rmgr(rm_tblspc_id, "tablespace", tblspc_redo, tblspc_desc, null, null)
pg_rmgr(rm_multixact_id, "multixact", multixact_redo, multixact_desc, null, null)
pg_rmgr(rm_relmap_id, "relmap", relmap_redo, relmap_desc, null, null)
pg_rmgr(rm_standby_id, "standby", standby_redo, standby_desc, null, null)
pg_rmgr(rm_heap2_id, "heap2", heap2_redo, heap2_desc, null, null)
pg_rmgr(rm_heap_id, "heap", heap_redo, heap_desc, null, null)
pg_rmgr(rm_btree_id, "btree", btree_redo, btree_desc, null, null)
pg_rmgr(rm_hash_id, "hash", hash_redo, hash_desc, null, null)
pg_rmgr(rm_gin_id, "gin", gin_redo, gin_desc, gin_xlog_startup, gin_xlog_cleanup)
pg_rmgr(rm_gist_id, "gist", gist_redo, gist_desc, gist_xlog_startup, gist_xlog_cleanup)
pg_rmgr(rm_seq_id, "sequence", seq_redo, seq_desc, null, null)
pg_rmgr(rm_spgist_id, "spgist", spg_redo, spg_desc, spg_xlog_startup, spg_xlog_cleanup)
日誌頭資訊的描述結構體為xlogrecord,其定義如下所示,xl_len記錄了rmgr資料的長度,xid記錄了修改事務id,xl_tot_len記錄了整條日誌記錄的長度。單條xlog日誌記錄支援最多備份4個檔案塊,如果記憶體中的檔案塊需要進行備份,每次就把xl_info低4位中的某一位依次置1,並將記憶體塊附在xlog日誌記錄中。
typedef struct xlogrecord
xlogrecord;
typedef struct rmgrdata
rmgrdata;
typedef struct bkpblock
bkpblock;
xlog日誌記錄在記憶體中以鍊錶的形式組織,其描述結構如下,
typedef struct xlogrecdata
xlogrecdata;
mysql 實現事務的提交與回滾
最近要對資料庫的資料進行乙個定時遷移,為了防止在執行過程sql語句因為某些原因報錯而導致資料轉移混亂,因此要對我們的指令碼加以事務進行控制。首先我們建一張tran test表 create table tran test f1 varchar 10 not null,f2 int 1 default...
hdfs 檔案提交與mr作業提交流程分析
看了不少東西,想把他們總結出來,若有錯誤還望不吝賜教 在hdfs架構中可以吧client認為是送貨人,nn是倉庫管理員,dn是乙個個倉庫。當客戶端要送貨 檔案 的時候,進行如下步驟 1.送貨員通過rpc通訊告知倉庫管理員 nn 說我這裡有貨物,請告訴我放在 啊 2.倉庫管理員通過查詢所維護的倉庫資訊...
分布式事務 二階段提交與三階段提交
一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...