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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker更换默认存储目录、默认存储目录磁盘剩余空间不足,采用软连、换目录、加容量解决

    docker更换默认存储目录、默认存储目录磁盘剩余空间不足,采用软连、换目录、加容量解决

    2021年6月4日
    129
  • 计算机组成原理期末复习【超实用】「建议收藏」

    计算机组成原理期末复习【超实用】「建议收藏」计算机组成原理(第二版)唐朔飞编著(课本有些地方还不错,可以下载电子版看看)五道解答题30‘=9’(9个知识点)+6’+6’+4’+5’我依据老师的考题范围手动整理,有什么问题or想添加的知识点请在评论下方留言!实时更新,助诸位共进步!一、解答题1.影响流水线性能的因素主要有哪几种?请简要加以说明。P348结构相关:是当多条指令进入流水线后,硬件资源满足不了指令…

    2022年5月31日
    37
  • 构造有参数的线程ParameterizedThreadStart

    构造有参数的线程ParameterizedThreadStart构造有参数的线程就得需要用到ParameterizedThreadStart,查看从元数据可以看出ParameterizedThreadStart是一个委托,参数类型必须是Object类型。我们通过线程对象的Start方法可以将参数传入,如thread.Start(“20191230”),此时参数“20191230”就会传递给子线程要执行的方法。代码:classProgram…

    2022年7月15日
    17
  • 理解Object.defineProperty方法

    理解Object.defineProperty方法nbsp nbsp 之前没怎么对 Object defineProper 方法做深入了解 就知道可以通过这个方法可以设置对象的属性 现在稍微了解以后 发现还是有不少东西值得记录一下的 所以写下这篇博客 一 语法 Object defineProper obj prop descriptor nbsp nbsp nbsp nbsp obj 需要定义属性的对象 nbsp nbsp prop 需要定义的属性 nbsp nbsp descriptor 属性的描述描述符 nbsp

    2026年2月5日
    0
  • unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…「建议收藏」

    unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…「建议收藏」参考链接:【解析】UnboundLocalError:localvariable’xxx’referencedbeforeassignment在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:主要是因为没有让解释器清楚变量是全局变量还是局部变量。【案例】如下代码片所示:deftest():ifvalue==1:a+=1returnavalue=…

    2022年6月24日
    25
  • R、Rstudio详细安装教程(详细图文)[通俗易懂]

    R、Rstudio详细安装教程(详细图文)[通俗易懂]R、Rstudio详细安装教程(详细图文)1、R下载及其安装下载安装2、Rstudio下载及安装下载安装测试1、R下载及其安装下载1、网址:https://cran.r-project.org/mirrors.html2、选择镜像3、选择系统4、选择base5、点击下载安装1、安装2、下一步3、选择安装路径4、下一步5、下一步6、继续下一步7、安装完成。2、Rstudio下载及安装下载1、下载地址:https://rstudio.com/produc

    2022年6月22日
    47

发表回复

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

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