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