暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日分享】2022.07.16 LSN与WAL关系

原创 Maleah 2022-07-16
1462

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)

关系

image.png

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论