PostgreSQL LSN详解

PostgreSQL LSN详解PostgreSQLLS 即 Logsequencen 日志序列号 这是 WAL 日志唯一的 全局的标识 那么 pg 中 LSN 究竟有什么作用呢 我们都知道 wal 日志中写入是有顺序的 比方说一条记录是先加 100 再乘 200 如果顺序错乱变成先乘 200 再加 100 那结果可是差之千里了 所以必须得记录 wal 日志的写入顺序 而 LSN 就是负责这个的 给每条产生的 wal 日志记录一个编号 熟悉 Oracle 的朋友可能清楚 这和 Oracle 中 redo 的 LRBA 和 HRBA 有点类似 LSN 和 WAL 我们先来看下 LSN

PostgreSQL LSN即Log sequence number,日志序列号,这是WAL日志唯一的、全局的标识。

那么pg中LSN究竟有什么作用呢?我们都知道wal日志中写入是有顺序的,比方说一条记录是先加100再乘200,如果顺序错乱变成先乘200再加100,那结果可是差之千里了,所以必须得记录wal日志的写入顺序。

而LSN就是负责这个的,给每条产生的wal日志记录一个编号。熟悉Oracle的朋友可能清楚,这和Oracle中redo的LRBA和HRBA有点类似。

LSN和WAL:

我们先来看下LSN是啥样的:

bill@bill=>select pg_current_wal_lsn(); pg_current_wal_lsn -------------------- 1/133E80B8 (1 row) 

既然LSN是wal日志的序列号,那么它和wal日志有什么关系呢?

wal日志LSN编号规则:
1/F8(高32位/低32位)

wal日志文件命名规则:
我们看到的wal日志是这样的:0000000000092

  • 其中前8位:00000001表示timeline;
  • 中间8位:00000001表示logid;
  • 最后8位:00000092表示logseg

对照关系:

  • wal日志的logseg前6位始终是0,后两位是LSN低32位/16MB(2*24),即LSN的前两位。如上例中logseg最后两位是92,LSN低32前两位也是92。
  • LSN在wal日志中的偏移量即LSN低32位中后24位对应的十进制值。

例如当前wal日志偏移量为504

bill=# select pg_walfile_NAME_OFFSET(pg_current_wal_lsn()); pg_walfile_name_offset -------------------------------- (0000000000092,504) (1 row) bill=# select x'1F8'::int; int4 ------ 504 (1 row) 

LSN常用脚本:

我们可以使用下面的一些脚本查看LSN相关的信息。

查看当前wal日志中LSN:

select pg_current_wal_lsn(); 

查看当前LSN对应的wal日志文件:

select pg_walfile_name(pg_current_wal_lsn()); 

查看wal日志文件名和偏移量:

select pg_walfile_name_offset(pg_current_wal_lsn()); 

查看表page中的LSN(需要安装pageinspect扩展):

SELECT lsn FROM page_header(get_raw_page('t1', 0)); 

LSN与数据恢复:

参考链接:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230725.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月6日 下午12:01
下一篇 2026年2月6日 下午12:22


相关推荐

  • Apache中 RewriteCond 规则参数介绍[通俗易懂]

    Apache中 RewriteCond 规则参数介绍[通俗易懂]Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结果,这次我终于算大概知道它的意思了。RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。RewriteEngineonRewriteCond%{HTTP_USER_AGENT}^Mozilla\/5\.0.*Rew…

    2022年6月10日
    32
  • python之列表(list)

    python之列表(list)1、格式namelist=[]#定义一个空列表namelist2=["tom","marry","Bob"]tlist

    2022年7月3日
    29
  • REST API和SOAP API之间的区别

    REST API和SOAP API之间的区别TheRepresentationalStateTransfer(REST)架构风格不是可以购买的技术,也不是可以添加到软件开发项目中的库。REST是一种世界观,将信息提升为我们构建的体系结构的第一流元素。RoyFielding博士的论文“架构风格和基于网络的软件架构设计”介绍并整理了用于描述“RESTful”系统的思想和术语。这是一份学术文件,但通过提供RESTful架构的基础,可…

    2022年7月13日
    18
  • FAT文件系统详解

    FAT文件系统详解FAT 格式的文件系统 磁盘数据分为 5 部分 MBR 区 DBR 区 FAT 区 DIR 区和 DATA 区 MBR 区 MBR MainBootReco 主引导扇区 意即为主引导记录区 位于整个硬盘的 0 磁道 0 柱面 1 扇区 在总共 512 字节的主引导扇区中 MBR 占用了 446 个字节 偏移 0 偏移 1BDH 另外的 64 个字节 偏移 1BEH 偏移 1FDH 交给了 DPT DiskPartitio 硬盘分区表

    2026年3月19日
    1
  • 字节跳动发布豆包 1.5 深度思考模型,同时升级文生图模型

    字节跳动发布豆包 1.5 深度思考模型,同时升级文生图模型

    2026年3月12日
    2
  • java实体entity转map对象[通俗易懂]

    java实体entity转map对象[通俗易懂]实体转对象方法一,一句搞定,直接返回map对象:importorg.springframework.cglib.beans.BeanMap;BeanMap.create(entityObj);方法二:利用反射——详见原文

    2022年5月5日
    224

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号