PG LSN与WAL关系
wal 文件
1、定义
wal(write ahead log),预写式日志
2、文件名
24个十六进制数组成。
- 前8位:时间线
- 中间8位:LogID
- 后8位:LogSeg
3、例
postgres=# select pg_walfile_name(pg_current_wal_lsn());
pg_walfile_name
--------------------------
000000010000000000000004
(1 row)
postgres=# select pg_walfile_name_offset(pg_current_wal_lsn());
pg_walfile_name_offset
--------------------------------
(000000010000000000000004,560)
(1 row)
LSN
1、定义
lsn(log sequence number),日志序列号。标识wal中的位置
2、LSN编号
64 位整数:高32位/低32位
3、例
postgres=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
0/4000230
(1 row)
关系

lsn偏移量与LSN编号
postgres=# select x'230'::int;
int4
------
560
(1 row)
互相推导
--1. LSN --> WAL 段文件
--# 法一:LSN低32位的前两位。例如:0/BC06EA90 的 wal 段文件的 LogSeg=BC
--# 法二:手动计算
postgres=# select to_hex(x'BC06EA90'::bigint / (16*1024*1024)) as LogSeg ;
logseg
--------
bc
(1 row)
--# 法三:内置函数计算
postgres=# select pg_walfile_name('0/BC06EA90') ;
pg_walfile_name
--------------------------
0000000100000000000000BC
(1 row)
--2. 计算两个 LSN 的偏移量
postgres=# select pg_wal_lsn_diff('0/BC06EA90','0/8E000060');
pg_wal_lsn_diff
-----------------
772205104
(1 row)
--3. 已知 LSN 和偏移量,求之后的 LSN
postgres=# select to_hex(x'8E000060'::bigint + 772205104) as LSN ;
lsn
----------
bc06ea90
(1 row)
最后修改时间:2022-08-24 17:39:21
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




