Postgresql日誌系統的實現(七)

2021-07-28 11:08:57 字數 2655 閱讀 1979

1.3.2

.2主要函式分析:

xloginsert

的執行步驟

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

執行步驟:

1.計算日誌記錄的長度

2.判斷是否該日誌記錄是否會寫入新的日誌段中

如果是,呼叫

xlogwrite

,把當前緩衝區中的所有日誌寫入磁碟中。也就是把屬於舊日誌段、且尚未寫入舊日誌段的日誌記錄寫入磁碟中

3.將這條日誌記錄寫入日誌緩衝區中。

a)如果當前緩衝區的剩餘空間無法容納這條日誌記錄。

i.我們先將這條日誌記錄中的前一部分寫入當前緩衝區中。

ii.呼叫advancexlinsertbuffer

,將下乙個緩衝區清空(如果這個緩衝區中的資料還未寫入磁碟中,呼叫

xlogwrite

,將此緩衝區的資料寫入磁碟)

iii.

將日誌記錄的剩餘部分寫入剛清空的緩衝區。

4.如果需要進行日誌的切換(切換條件為:

rmid == rm_xlog_id && info == xlog_switch

),則呼叫「

xlogwrite

」寫出xlog

快取中的所有內容,然後切換成新的段檔案,更新

xlog

共享快取等資訊。

切換段檔案的主要**為:

advancexlinsertbuffer(true);

5.

說明:

分析xloginsert

()函式,可以看出需要寫日誌的操作有:

可操作物件

可執行的操作

資料庫:

建立資料庫

表空間:

建立、刪除

堆(資料操作等):

插入、刪除、更新、釋放

索引(b樹、

gin等):

新建、插入、**、建立新根、讀取根、刪除項、刪除頁

序列:定義、修改、讀取值、設定值

儲存區管理:

建立、截斷

事務:提交、中斷、子事務的中斷

檢查點:建立

xlogflush

的執行步驟

功能:保證給出位置上的xlog日誌資料被寫(flush)到了磁碟上

注意:不同於xlogwrite,這個函式要盡量避免請求日誌寫鎖(walwritelock)。

呼叫xlogflush()的函式如圖:

刷出日誌的時機 圖:根據呼叫關係配合**即可知預先日誌的原理

xlogwrite

的執行步驟

功能:把

xlog

日誌中的內容寫出記憶體

執行步驟:

1.迴圈判斷當前所請求的日誌記錄是否已寫入磁碟,如果不是,執行下列操作,否則跳到第2步

a)如果本程序最後一次寫日誌時的

logid

和segid

與系統當前的

logid

和segid不符

i.關閉

xlog

日誌檔案(通過呼叫「

xlogfileclose

」),建立或開啟系統當前

logid

和segid

對應的日誌段檔案(通過呼叫「

xlogfileinit

」),更新控制檔案的內容(通過呼叫「

updatecontrolfile

」)。

ii.如果系統當前

segid

和上一次作

checkpoint

時的segid

相比,超過

checkpointsegments

個;或者當「

redorecptr

」中記載的「

xlogid

」與當前的「

openxlogid

」相比不一致,表明其所儲存的舊的資訊已經很久了,需要做

chencpoint

,故呼叫「

requestcheckpoint

」,請求

bgwrite

程序進行建立檢查點操作。

iii.

呼叫「pwrite

」把xlog

中應該寫到外存中的資訊寫出去

iv.如果現在所寫的緩衝區對應當前日誌段的最後一頁、或者使用者強制要求日誌段轉換,則呼叫「

issue_xlog_fsync

」根據同步的引數(「

postgres.conf

」檔案中提供了相應的

guc引數)同步日誌檔案;

v.如果上一條成立,且處於歸檔模式,在

」archive_status」

目錄下,產生乙個檔案,作為用於通知可以進行歸檔檔案的標誌,併發訊號通知歸檔程序可以進行歸檔了。其檔名稱是日誌段的名稱

+」.ready」

,例如」 000000010000000000000000」.ready 2

.執行fsnc 3

.修改xlog

的共享記憶體狀態

Postgresql日誌系統的實現(五)

1.3.1 3 xlog 其他資訊 資源資料結構 在xlog internal.h中定義了乙個結構體,resource manager可以呼叫某種資源 rmgrdata代表的資源 的某個方法 redo,undo等 這裡的資源可以簡單的理解成pg中存在這些 在pg執行時,系統中就生成了這些可利用的資源...

PostgreSQL的日誌型別

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

PostgreSQL的日誌型別

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