PostgreSQL码农集散地

答群友 | PG Data Block中LSN的作用是什么?

本期播客

PG Data Block中LSN的作用是什么?

在PostgreSQL的Data Block头中, 包含LSN信息, 这个LSN是啥? 有什么用?

LSN 可以简单理解为WAL record的寻址地址.

当Data Block发生修改时, PG会生成该修改对应的WAL record, 并分配LSN. 同时在Block header写入对应的LSN.

WAL 大家都懂的, 用于实现数据库的持久化、奔溃恢复、增量备份恢复、流复制、逻辑复制信息的存储解析和同步等.

如何理解WAL的寻址? LSN地址是自增的. 简单理解就是每个wal文件多大, 根据epoch和每个wal文件的大小, 以及当前的LSN就可计算出对应的WAL文件名, 根据WAL文件名就可计算出这个文件包含什么LSN区间的数据.

理解了LSN后, LSN有什么用呢?

恢复时: 从data block的头中读取到对应的LSN, 然后判断其地址是否大于最近一次已完成的checkpoint记录的开始LSN, 大于它则从相应wal文件中寻址并找到对应的wal record, 合成最新的data block.

增量备份时: 例如上一次全量备份结束时记录的当时备份的WAL的最后一笔wal的最大LSN. 下次进行增量备份时, 检查data block header里的LSN是否大于这个LSN? 大于的话, 说明在上次全量备份后, 又对这个data block进行了修改, 所以这个数据块需要备份. 如果小于等于, 则不需要备份这个data block.

最后附一则济南的线下峰会消息:
PostgreSQL & IvorySQL 2026 年度峰会将于4月份在济南召开,这是目前国内规模最大的PG峰会. 
我是新特性分论坛出品人,欢迎报名参与分享,主委会可解决分享嘉宾住宿和路费。
报名地址:  https://jsj.top/f/uebqBc

议题方向:

  • PostgreSQL 新功能
  • PostgreSQL 内核机制与性能优化
  • PostgreSQL 扩展程序
  • AI + PostgreSQL 技术实践
  • 云原生PostgreSQL或IvorySQL
  • PostgreSQL 用户实践
  • IvorySQL 兼容性与生态实践
  • 基准测试与性能调优
  • 高可用性技术
  • …… 任何与PostgreSQL或IvorySQL相关的内容