PostgreSQL技術大講堂 - 第22講:CLOG作用與管理
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢
PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。
第22講:CLOG作用與管理
內容1: PostgreSQL CLOG概述
內容2: CLOG作用與管理
內容3: 診斷當前用到的CLOG塊
內容4: 刪除不需要的CLOG文件
CLOG概述
CLOG用來記錄事務號的狀態,主要是用來判斷行的可見性。每個事務狀態占用兩個bit位。事務的狀態有4種:IN PROGRESS,COMMITTED,ABORTED和SUB_COMMITTED。CLOG由一個或多個8KB頁組成。CLOG在邏輯上形成一個數組,數組的每個元素對應事務ID號和事務狀態。
一個事務占用2個bit位,一個字節可以存放4個事務狀態,一個頁塊可以存放8192*4=32768個事務狀態。
當數據庫庫啟動時,這些文件會被加載到內存中。CLOG的信息同樣會被記錄到wal日志中,當數據庫異常中斷時,CLOG的信息會從wal日志還原。
CLOG存放在緩存中,當checkpoint時開始刷新到CLOG文件中。當數據庫庫關閉庫后,CLOG會被寫入到$PGDATA/pg_xact子目錄中,文件命名為0000,0001,00002......,單個文件最大為256K。
Commit Log
· CLOG工作方式
· CLOG如何維護
數據庫正常關閉或者檢查點發生時,clog數據寫入pg_xact目錄下的文件中
命名習慣:0000 0001 ……
數據庫啟動時從pg_xact文件中加載數據
由Vacuum 進程定期處理
診斷當前用到的CLOG塊
· 計算當前使用的CLOG數據塊位置
一個事務占用2個bit位,一個字節可以存放4個事務狀態,一個頁塊可以存放8192*4=32768個事務狀態。
1、查看當前的TXID號
SELECT txid_current();
txid_current
--------------
623
2、計算記錄在哪個CLOG塊中
select 623/(8192*4) block;
block
-------
0
刪除不需要的CLOG文件
· 刪除CLOG文件
當發生急性凍結時會更新pg_database.datfrozenxid的值,此時,如果某些CLOG文件不包含包含最小pg_database.datfrozenxid以及之前的信息,會嘗試刪除不必要的clog文件。因為這些CLOG文件中記錄的事務所修改的行已經被凍結,那么在進行行可見性規則判斷時就不需要獲得該事務的狀態。

以上就是【PostgreSQL從小白到專家】第22講 - "CLOG作用與管理" 的內容,歡迎一起探討交流,釘釘交流群:35822460,會有專門的視頻講解這一部分內容,往期視頻及文檔,聯系CUUG