pg wal日志名称格式及其含义

PostgreSQL WAL机制全解析:从日志原理到故障排查实战 预写日志(WAL)是PostgreSQL保障数据一致性的核心机制,通过先记录日志再修改数据文件的方式,将随机I/O转化为顺序追加,显著提升事务处理性能。理解LSN、检查点、归档与复制槽的协作原理,是解决pg_wal目录膨胀、恢复不完整等问题的关键。从崩溃恢复到时间点恢复(PITR),再到流复制构建高可用集群,WAL贯穿了数据库运维的多个核心场景。本文系统梳理WAL的工作流程、关键参数与常见故障排查思路,帮助开发者和DBA快速定位问题,构建可靠的数据库运维体系。 阅读详情

pg wal日志一般是如图所示的样子:
在这里插入图片描述

000000010000000000000000
时间线LogIdLogSeg

时间线:英文为timeline,是以1开始的递增数字,如1,2,3…
LogId:32bit长的一个数字,是以0开始递增的数字,如0,1,2,3…
LogSeg:32bit长的一个数字,是以0开始递增的数字,如0,1,2,3…

WAL日志的位置是一个无限长的位置,数据库一建立后,不断的开始写WAL日志,此位置就不断的增加,即使数据库重启后,此位置也不会重新开始,只会一直增加,所以这个位置值显然如果用32bit的一个数字是不够的,32bit最多表示4GB的日志,所以大家很容易可以想到用一个64bit的数字来表示这个WAL日志的位置,这当然就足够了(因为要写4G*4G的数据才会用完64bit的长度)。

这个WAL日志的位置称之为LSN,即Log Sequence Number。

看起来,LogId+LogSeg好象刚好组成一个64bit的LSN,是否是LogId是这个64bit的LSN中的高32bit字节,而LogSeg就是低32bit的字节呢?LogId确实是LSN的高32字节,但LogSeg却不是低32bit的字节,另我们可以观察到LogSeg的值是从00000000到000000FF后,就重新从00000000开始了,并不会出现00000100这样的数值,也就是LogSeg的8个字符中,前6个字符始终是0,这是为什么?

原来LogSeg是按文件递增,每增加一个文件,LogSeg就增加1,而每个WAL文件的大小是16M,LogSeg是LSN的低32bit的字节的值再除以16M的结果,这样4G/16M结果是256,所以LogSeg最大的值为256,即16进制的0xFF,这样就解释了LogSeg的前6字节都是零的原因。

通过在pg_stat_replication里面也可以查到wal日志序列:
在这里插入图片描述
以0/12B00B48为例子:logId就是“0/12B00B48”中的第一个数字,即0
logSeg就是“0/12B00B48”中的第二个数字除以16M的大小,即12B00B48除以16M,而16M相当于2的24次方,相当于十六进制数“12B00B48”右移6位,即“12B00B48”中的最高两位“12”
那么根据WAL文件的格式timeline+logId+logSeg,则相当于:“00000001”+“00000000”+“00000012”,即为:“000000010000000000000012” 写的位置是在文件“000000010000000000000012”中的偏移量是多少呢?实际上是在“0/12B00B48”中第二个数字“12B00B48”后六位“B00B48”,换算成十进制为“11537224”。
在pg13可以通过select pg_walfile_name_offset(‘0/11001F78’);函数来解析。
在这里插入图片描述

PostgreSQL源码分析——WAL日志(一) WAL日志对数据库故障恢复,物理备份,事务处理等至关重要,这里我们分析一下WAL日志的相关内容。如果没有WAL日志文件,那么数据库需要在每次更新页面后,刷盘持久化才能提交,频繁的进行刷盘,并且是随机写,而且是整页的写,代价很大。对此,设计了WAL,每次只将对数据页的修改抽象成WAL日志记录,顺序写入WAL日志文件中,这就将随机写变为了顺序写入,并且文件的大小也有所减少,因为绝大部分情况不用整页写入了,减少了刷盘的代价。 阅读详情

相关推荐

PostgreSQL的xlog/Wal归档及日志清理

作者:阎书利 xlog/wal日志 类似于Oracle的redo,PostgreSQL的redo文件被称为WAL文件或XLOG文件,存放在PGDATA/pgxlog或(PGDATA/pg_xlog或(PGDATA/pgx​log或(PGDATA/pg_wal)目录中(PostgreSQL从10版本开始,将所用xlog相关的全部用wal替换了)。任何试图修改数据库数据的操作都会写一份日志到磁盘。 本文举例的数据库版本为(PostgreSQL)11.5 wal命名格式文件名称为16进制的24个字符组成,每8个

PostgreSQL China 3284

WAL日志文件名称格式详解

转自:http://blog.osdba.net/534.html WAL日志文件名称格式详解 PostgreSQL的WAL日志文件在pg_xlog目录下,一般情况下,每个文件为16M大小: osdba-mac:~ osdba$ ls -l $PGDATA/pg_xlog total 262144 -rw------- 1 osdba osdba ...

dimawei2225的博客 575

gaussdb 日志管理【系统、操作、黑匣子、审计、WAl 日志管理】【01】

1. 查看系统日志 运行日志和调试日志可以统称为系统日志,运行日志是数据库正常运行时产生的日志,调试日志基于数据库进行应用程序的开发调试时产生的日志。GaussDB的运行日志和调试日志都记录在同一个日志文件中。 日志文件存储路径 在$GAUSSDATA\pg_log目录下。其中$GAUSSDATA代表GaussDB的数据目录。 日志文件命名格式 GaussDB的运行日志和调试日志记录在如下文件中: gaussdb+日期+时间.log。 默认情况下,超过1天或者日志文件大于16MB,则生成新的日志文件用以记

qq_42226855的博客 3788

pg 崩溃恢复篇(一)—— WAL的作用与全页写机制

WAL(Write Ahead Log)机制最初在7.1版中实现,以减轻服务器崩溃的影响。它也是基于时间点恢复(PITR)和流复制(SR)实现的基础。WAL机制非常复杂,在第一篇中,我们只看看为什么需要WAL,它有什么作用,又会有什么不足。 一、没有WAL的插入操作 要看为什么需要有WAL,那就先看看如果没有会怎么样。 假设我们TABLE_A中插入一些数据,这些数据没有使用WAL功能...

Hehuyi_In的博客 5782

深入PostgreSQL逻辑复制内核:从WAL日志到pg_replslot,一次完整的数据流转剖析

本文深入解析PostgreSQL逻辑复制的核心机制,从WAL日志解析到复制槽管理,详细剖析了数据从写入到同步的全流程。重点介绍了输出插件(Output Plugin)的作用、复制槽(pg_replslot)的工作原理以及发布订阅模式的应用实践,帮助开发者掌握PostgreSQL高效数据同步的关键技术。

weixin_30580341的博客 236

深入理解pg wal日志

深入理解pg wal日志

MyySophia的博客 462

PostgreSQL主机无法自动清理pg_wal下wal文件

数据库数据目录下pg_wal的WAL文件在开启归档的模式下会将已归档WAL文件自动清理,具体流程是,转储WAL段文件到disk,写满或者使用pg_switch_wal()后,会生成000000xxxx.ready文件,调用archive_command命令且成功执行后,将ready文件更名为.done文件。而数据库会在执行checkpoint后计算出最旧的需保留的WAL文件,比该值更早的WAL文件...

m0_37535673的博客 4297

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 347

【PG wal日志LSN相关函数】

如下对PG一些wal以及LSN相关函数进行介绍 1.wal文件名组成 wal在$PGDATA/pg_wal下。10之前为pg_xlog wal命名格式文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下: 00000001 00000000 00000001 -------- -------- -------- 时间线 逻辑id 物理id 2.查看wal时间 postgres=# select * from pg_ls_waldir() order by mod

小怪兽的博客 2705

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 308

vcs中systemverilog和c/c++联合仿真

前言 systemverilog中,可以通过DPI、PLI来与外部其它语言的程序进行交互。PLI又分为三类,TF、ACC和VPI,可以认为是PLI技术的三代演进: 其中VPI(PLI3.0)是TF/ACC的一个超集,目前使用的PLI基本上都是VPI。 与PLI技术相独立的另一个技术就是DPI,DPI技术简化了systemverilog与foreign language的交互步骤,对于开发者相对友好,所以使用相对广泛一些。 本文不对DPI中程序调用/数据交互展开讨论(这部分可以参考绿皮书..

kevindas的博客 1万+

【PostgreSQL的xlog/Wal归档及日志清理】

xlog/wal日志 类似于Oracle的redo, PostgreSQL 的redo文件被称为WAL文件或XLOG文件,存放在PGDATA/pg_xlog 或(PGDATA/pg_wal)目录中( Postgresql 从 10 版本开始,将所用xlog相关的全部用wal替换了)。 任何试图修改数据库数据的操作都会写一份日志到磁盘。 本文举例的数据库版本为 (PostgreSQL) 11.5 wal命名格式文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下: 00000001

小怪兽的博客 4767

深度学习12—VGG19实现

state_dict = load_state_dict_from_url(model_urls['vgg19'],model_dir='./model' ,progress=progress)#预训练模型地址。accuracy=((out.argmax(1)==label).sum()).clone().detach().cpu().numpy()#正确预测的总和比测试集的长度,即预测正确的精度。image=torch.reshape(image,(1,3,224,224))#四维图形,RGB三个通。

m0_55196097的博客 2441

PostgreSQL WAL日志解析实战:从LSN到文件名的深度剖析

本文深入解析PostgreSQL WAL日志的核心机制,从LSN(Log Sequence Number)的基础概念到WAL文件名的映射原理,详细介绍了pg_waldump工具的使用方法和实战技巧。通过实际案例展示如何利用WAL日志进行故障恢复和性能分析,帮助数据库管理员和开发者更好地理解和优化PostgreSQL的日志系统。

k0l1m2n3o的博客 747

硬件工程师笔记——电子器件汇总大全

本文系统总结了14种常用电子器件的工作原理及功能应用,包括电阻、压敏电阻、电容、电感、二极管、三极管、MOS管、晶振、光耦、IGBT、继电器、磁珠、可控硅和线性稳压器。每种器件从结构原理、工作特性到典型应用进行全面解析,如电阻的限流分压、电容的储能滤波、三极管的放大开关等。重点阐述了各器件在电路设计中的关键作用,如IGBT的功率控制、继电器的隔离保护、LDO的电压稳定等,并提供了实际电路应用案例。文章还整理了硬件工程师笔试面试相关的知识点和真题资源,为电子工程师提供全面的技术参考。

XU157303764的博客 2万+

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

PostgreSQL的WAL日志解析工具pg_waldump 浅谈

PostgreSQL 10.x 常用工具(一) pg_waldump 介绍 把PG数据库集群的 wal 日志翻译成人为可阅读的信息,该工具要求访问数据库 data 目录权限,主要用于展示和debug的目的。 当服务器正在运行时可能会给出错误的结果。 只有指定的时间线 会被显示(如果没有指定,则显示默认时间线)。 其他时间线上的记录会被忽略。 pg_xlogdump不能读取具有后缀.p...

欢迎来到我的技术分享博客!这里将带你深入了解AI技术、Java架构设计、系统开发与优化等前沿技术内容。我专注于从实战经验 1万+

DO-254标准详解:航空电子硬件设计保证指南全方位解析

RTCA DO-254, 也被称为《机载电子硬件设计保证指南》,是航空电子硬件设计和验证中的关键标准,旨在为确保机载电子硬件的安全性提供设计保证。自2000年首次发布以来,DO-254就成为了民航和军用飞机中电子硬件设计认证的基准文件。随着航空硬件技术的进步和日益复杂化,确保硬件设计的准确性、可靠性和安全性变得至关重要。本标准是由RTCA和EUROCAE共同开发的,适用于涉及机载硬件的航空公司、飞机制造商、供应商和认证机构。

qq_41854911的博客 3682

浅谈postgres数据库wal日志

PostgreSQL的redo文件被称为WAL文件或XLOG文件,存放在 $PGDATA/pg_xlog或 $PGDATA/pg_wal目录中(PostgreSQL从10版本开始,将所用xlog相关的全部用wal替换了)。任何试图修改数据库数据的操作都会写一份日志到磁盘。wal命名格式文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下:通过select pg_switch_xlog()或select pg_switch_wal();

weixin_44917075的博客 1654

海康威视iVMS-8700综合安防管理平台 文件读取漏洞复现

HIKVISION iVMS 综合安防管理平台download接口处存在任意文件读取漏洞,攻击者通过构造token绕过身份认证,读取服务器中的目录信息与敏感文件。使系统处于极不安全的状态。

0xSec 3304

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

postgresql 数据备份命令及增量pg_wal配置

docker postgresql 安装 备份基本用法==>日常笔记

weixin_44597565的博客 2156

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PostgreSQL 基础知识:WAL 文件和序列号

开始位置是INSERT之前的current_wal_lsn,结束位置是插入之后的current_wal_lsn。可以比较LSN(类型为 pg_lsn)的值,以确定在两个不同偏移量(以字节为单位)之间生成的WAL的数量。当以这种方式使用时,重要的是要知道,如果使用多个WAL日志,则计算假设使用了完整的WAL段(16MB)。每个元素是一个十六进制数。这里’T’是时间线,'X’是LSN的高32位,'Y’是LSN的低32位。使用这两个LSN位置,我们可以计算INSERT生成的WAL的数量(在本例中为168字节)。

allway2的博客 374

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

openGauss数据库运维:日志参考——审计日志/WAL日志/性能日志

预写式日志WAL(Write Ahead Log,也称为Xlog)是实现事务日志的标准方法,对数据文件(表和索引的载体)持久化修改之前必须先持久化相应的日志。第一部分表示时间线,第二部分表示日志文件标号,第三部分表示日志文件的段标号。性能日志主要关注外部资源的访问性能问题。性能日志指的是数据库系统在运行时检测物理资源的运行状态的日志,在对外部资源进行访问时的性能检测,包括磁盘等外部资源的访问检测信息。默认情况下,每日0点或者日志文件大于20MB或者数据库实例(数据库节点)重新启动后,会生成新的日志文件。

weixin_53596073的博客 1133

PostgreSQL 复制槽管理:CloudNativePG 防止 WAL 日志堆积

在 PostgreSQL 高可用架构中,WAL(Write-Ahead Log)日志的管理直接关系到数据安全性与存储稳定性。当集群启用物理复制时,未正确配置的复制槽(Replication Slot)可能导致 WAL 日志无限堆积,最终耗尽存储空间并引发数据库服务中断。CloudNativePG 作为 Kubernetes 原生的 PostgreSQL Operator,提供了自动化的复制槽生命...

gitblog_00265的博客 920
上一篇: pg故障修复记录
下一篇: pg能够提高可靠性的参数,pg_checksums
code_feien
博客等级 码龄7年 71粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值