PostgreSQL DBA(15) - WAL檔案結構
資料庫的歷史變更會持久化到事務日誌檔案中,本節簡單介紹了PG中事務日誌檔案的體系結構(以下簡稱WAL檔案結構)。
一、WAL檔案結構
PG使用無符號64bit整型(uint64)作為日誌檔案的定址空間,理論上來說,如果只有一個日誌檔案,那麼這個事務日誌檔案的大小最大為2^64Bytes(即16M*1TB=16EB)。為了高效管理事務日誌檔案,PG把日誌檔案劃分為N個大小為16M(預設值)的WAL segment file.
總體結構如下圖所示:
WAL segment file
WAL segment file檔案長度為24,由3部分組成,每個部分是8個16進位制數字:
1.第1部分是TimeLineID,0x00000000 -> 0xFFFFFFFF
2.第2部分是邏輯檔案ID,0x00000000 -> 0xFFFFFFFF
3.第3部分是物理檔案ID,0x00000000 -> 0x000000FF
邏輯檔案ID佔32bit,物理檔案ID佔8bit,16M的檔案佔24bit,合計64bit.PG透過這三部分的組合,達到最大64bit的檔案定址空間.
檔案儲存目錄
事務日誌檔案儲存在$PGDATA/pg_wal目錄下
二、LSN
LSN:Logical Sequence Number,XLOG record中的LSN表示該記錄寫入到事務日誌中位置,大小為uint64.在PG中可以理解為事務日誌檔案中的偏移(Offset).
LSN由3部分組成,分別是邏輯檔案ID,物理檔案ID和檔案內偏移.如LSN號1/4288E228,其中1為邏輯檔案ID,42為物理檔案ID,88E228為WAL segment file檔案內偏移.
按此規則,給定一個LSN,很容易得到其對應的日誌檔案(假定時間線為1):
LSN-1/4288E228 --> WAL segment file:00000001 00000001 00000042
PG也提供了相應的函式根據LSN獲取日誌檔名:
testdb=# SELECT pg_walfile_name('1/4288E228');
pg_walfile_name
--------------------------
000000010000000100000042
(1 row)
三、參考資料
WAL Internals Of PostgreSQL
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2374779/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL DBA(16) - WAL segment file內部結構SQL
- PostgreSQL DBA(14) - WAL基本術語SQL
- PostgreSQL DBA(172) - PG 13(WAL activity in EXPLAIN)SQLAI
- PostgreSQL-PG體系結構之WAL(五)SQL
- PostgreSQL WAL解析:構建WAL記錄準備SQL
- PostgreSQL DBA(38) - PG 12 Connection slots and WAL sendersSQL
- PostgreSQL DBA(20) - WAL full-page-write淺析SQL
- PostgreSQL啟動恢復透過checkpoint open wal檔案SQL
- WAL檔案回收
- PostgreSQL DBA(150) - Extension(pgmetrics)SQL
- 【PG體系結構】Postgresql 配置檔案詳解SQL
- PostgreSQL DBA(158) - Locks(tuple locks)SQL
- PostgreSQL DBA(9) - 執行計劃資料結構SQL資料結構
- PostgreSQL DBA(17) - XLOG Record data內部結構SQL
- PostgreSQL的wal_buffersSQL
- PostgreSQL的xlog/Wal歸檔及日誌清理SQL
- PostgreSQL 原始碼解讀(112)- WAL#8(XLogCtrl資料結構)SQL原始碼GC資料結構
- PostgreSQL 原始碼解讀(109)- WAL#5(相關資料結構)SQL原始碼資料結構
- PostgreSQL email list:nvm wal bufferSQLAI
- PostgreSQL DBA(155) - Develop(“大表”連線)SQLdev
- PostgreSQL DBA(156) - pgAdmin(Rollback setting)SQL
- 類檔案結構_class類檔案的的結構
- BMP檔案結構
- PostgreSQL DBA(30) - Backup&Recovery#3(資料檔案損壞恢復)SQL
- PostgreSQL:物理結構SQL
- PostgreSQL:程式結構SQL
- PostgreSQL DBA(45) - Hypothetical Indexes in PostgreSQLSQLIndex
- 非易失性WAL BUFFER實現機制解析:預分配WAL檔案改造
- PostgreSQL DBA(154) - pgAdmin(bool轉換為smallint)SQL
- PostgreSQL DBA(157) - pgAdmin(OOM & max_locks_per_transaction )SQLOOM
- PE 檔案結構圖
- Class類檔案結構
- wsdl檔案結構分析
- Linux檔案結構Linux
- 控制檔案的結構
- BMP檔案結構 (轉)
- oracle結構梳理---歸檔檔案Oracle
- PostgreSQL 原始碼解讀(113)- WAL#9(Insert&WAL - CopyXL...SQL原始碼