日志文件則由24個16進制數字組成,分三部分:時間線、LSN高32位、LSN低32位/(2**24)的值
使用lsn 獲取 wal文件名的實例
postgres=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn()); pg_current_wal_lsn | pg_walfile_name | pg_walfile_name_offset --------------------+--------------------------+------------------------------------ 3FB/AE61A1A0 | 00000001000003FB000000AE | (00000001000003FB000000AE,6398368) (1 row) postgres=# select x'61A1A0'::int; int4 --------- 6398368 (1 row)
pg_current_wal_lsn():獲得當前wal日志寫入位置。
pg_walfile_name():轉換wal日志位置為文件名。
pg_walfile_name_offset():返回轉換后的wal日志文件名和偏移量。
說明
LSN:3FB/AE61A1A0
3FB:代表wal文件的第二部分
AE:代表wal文件的最后兩位
61A1A0:代表偏移量
00000001000003FB000000AE
wal文件由24個字符,三部分組成,每部分由8個字符組成,代表含義如下
00000001:代表數據庫運行的時間軸,如果恢復過數據庫(主備切換)這個值會增大
000003FB:對LSN的第二部分對應
000000AE:代表walfile文件的最后兩位
查看wal日志記錄大小
=> SELECT pg_size_pretty('0/3A69C478'::pg_lsn - '0/38E04A08'::pg_lsn); pg_size_pretty ---------------- 25 MB (1 row)
查看統計數據:
postgres$ /usr/lib/postgresql/11/bin/pg_waldump --stats -p /var/lib/postgresql/11/main/pg_wal -s 0/3A69C530 -e 0/3BE87658 Type N (%) Record size (%) FPI size (%) ---- - --- ----------- --- -------- --- XLOG 1721 ( 1,03) 84329 ( 0,77) 13916104 (100,00) Transaction 27235 ( 16,32) 926070 ( 8,46) 0 ( 0,00) Storage 1 ( 0,00) 42 ( 0,00) 0 ( 0,00) CLOG 1 ( 0,00) 30 ( 0,00) 0 ( 0,00) Standby 4 ( 0,00) 240 ( 0,00) 0 ( 0,00) Heap2 27522 ( 16,49) 1726352 ( 15,76) 0 ( 0,00) Heap 109691 ( 65,71) 8169121 ( 74,59) 0 ( 0,00) Btree 756 ( 0,45) 45380 ( 0,41) 0 ( 0,00) -------- -------- -------- Total 166931 10951564 [44,04%] 13916104 [55,96%]