PostgreSQL技術(shù)大講堂 - 第22講:CLOG作用與管理

PostgreSQL從小白到專(zhuān)家,是從入門(mén)逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛(ài)PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
第22講:CLOG作用與管理
內(nèi)容1: PostgreSQL CLOG概述
內(nèi)容2: CLOG作用與管理
內(nèi)容3: 診斷當(dāng)前用到的CLOG塊
內(nèi)容4: 刪除不需要的CLOG文件
CLOG概述
CLOG用來(lái)記錄事務(wù)號(hào)的狀態(tài),主要是用來(lái)判斷行的可見(jiàn)性。每個(gè)事務(wù)狀態(tài)占用兩個(gè)bit位。事務(wù)的狀態(tài)有4種:IN PROGRESS,COMMITTED,ABORTED和SUB_COMMITTED。CLOG由一個(gè)或多個(gè)8KB頁(yè)組成。CLOG在邏輯上形成一個(gè)數(shù)組,數(shù)組的每個(gè)元素對(duì)應(yīng)事務(wù)ID號(hào)和事務(wù)狀態(tài)。
一個(gè)事務(wù)占用2個(gè)bit位,一個(gè)字節(jié)可以存放4個(gè)事務(wù)狀態(tài),一個(gè)頁(yè)塊可以存放8192*4=32768個(gè)事務(wù)狀態(tài)。
當(dāng)數(shù)據(jù)庫(kù)庫(kù)啟動(dòng)時(shí),這些文件會(huì)被加載到內(nèi)存中。CLOG的信息同樣會(huì)被記錄到wal日志中,當(dāng)數(shù)據(jù)庫(kù)異常中斷時(shí),CLOG的信息會(huì)從wal日志還原。
CLOG存放在緩存中,當(dāng)checkpoint時(shí)開(kāi)始刷新到CLOG文件中。當(dāng)數(shù)據(jù)庫(kù)庫(kù)關(guān)閉庫(kù)后,CLOG會(huì)被寫(xiě)入到$PGDATA/pg_xact子目錄中,文件命名為0000,0001,00002......,單個(gè)文件最大為256K。
Commit Log
· CLOG工作方式

· CLOG如何維護(hù)
數(shù)據(jù)庫(kù)正常關(guān)閉或者檢查點(diǎn)發(fā)生時(shí),clog數(shù)據(jù)寫(xiě)入pg_xact目錄下的文件中
命名習(xí)慣:0000 0001 ……
數(shù)據(jù)庫(kù)啟動(dòng)時(shí)從pg_xact文件中加載數(shù)據(jù)
由Vacuum 進(jìn)程定期處理
診斷當(dāng)前用到的CLOG塊
· 計(jì)算當(dāng)前使用的CLOG數(shù)據(jù)塊位置
一個(gè)事務(wù)占用2個(gè)bit位,一個(gè)字節(jié)可以存放4個(gè)事務(wù)狀態(tài),一個(gè)頁(yè)塊可以存放8192*4=32768個(gè)事務(wù)狀態(tài)。
1、查看當(dāng)前的TXID號(hào)
SELECT txid_current();
txid_current
--------------
623
2、計(jì)算記錄在哪個(gè)CLOG塊中
select 623/(8192*4) block;
block
-------
0
刪除不需要的CLOG文件
· 刪除CLOG文件
當(dāng)發(fā)生急性?xún)鼋Y(jié)時(shí)會(huì)更新pg_database.datfrozenxid的值,此時(shí),如果某些CLOG文件不包含包含最小pg_database.datfrozenxid以及之前的信息,會(huì)嘗試刪除不必要的clog文件。因?yàn)檫@些CLOG文件中記錄的事務(wù)所修改的行已經(jīng)被凍結(jié),那么在進(jìn)行行可見(jiàn)性規(guī)則判斷時(shí)就不需要獲得該事務(wù)的狀態(tài)。


以上就是【PostgreSQL從小白到專(zhuān)家】第22講 - "CLOG作用與管理" 的內(nèi)容,歡迎一起探討交流,釘釘交流群:35,82,24,60,會(huì)有專(zhuān)門(mén)的視頻講解這一部分內(nèi)容,往期視頻及文檔,聯(lián)系CUUG