摘要:pagehack和pg_xlogdump可以帮助我们在数据库故障定位中,解析各种文件的页面头和xlog日志。

随着技术的演进,数据也发生了巨大的变化,数据规模越来愈大、数据种类呈现多样性,数据处理的时效性要求也越来越高,GaussDB(DWS)实时数仓当前面临着巨大的机遇,也面临着巨大的挑战。同样的,强大工具来帮助我们定位各种各样的问题。

数据库目录下有多种二进制文件,比如系统表、普通表、索引和日志文件等等,但是数据库运行过程中的问题,我们该如何利用这些文件去定位和分析问题呢? pagehack和pg_xlogdump就是我们解决问题的利器,帮助我们在故障定位中,解析各种文件的页面头和xlog日志。

pagehack:

我们先来看看pagehack的各项参数说明

这里我们列举出一下几种非常常用的解析方法:

(1)数据库中的系统表有很多,但是在数据库data目录下,该如何把系统表和磁盘上的文件一一对应呢,我们可以通过pagehack查询data目录下的pg_filenode.map

执行pagehack -f pg_filenode.map -t filenode_map,我们就可以看到如下结果,这里的relfilenode就对应磁盘上的文件

(2)除了系统表,另外一个常用的数据类型就是行存表的文件,通常对于存储异常、读取异常等问题,我们都需要通过pagehack查询行存表的头文件信息。首先连接DN上,查询到该行存表对应的relfilenode(16502),到对应DN的data目录下,执行:pagehack -f 16502 -t heap,结果如下:

根据解析出的结果,page页面头结构如下

解析出的页面中一些常用信息含义如下,关于page页面详细信息,后面会出一篇博文来专门介绍page页面结构信息

pd_lsn:本页面最后一次变更所写入的xlog记录对应的lsn。

pd_special:用在索引页中,在索引页中它指向特殊空间的起始位置,在堆表页面中它指向页尾。

pd_pagesize_version:页面大小以及页面布局的版本号。

t_xmin: 保存插入该元组的事务的txid(事务号)

t_xmax:保存删除或更新此元组的事务的txid。如果尚未删除或更新此元组,则t_xmax设置为0,即无效。

t_infomask:用于标识元组当前的状态。

t_infomask2:HOT链更新状态和当tuple的属性个数。

pg_xlogdump:

GaussDB数据库利用日志文件来防止断电之类的故障导致的数据丢失,任何试图修改数据库的操作都会写一份日志记录到磁盘,这个日志称为XLOG。在数据库定位问题时,就可以使用pg_xlogdump来解析XLOG日志,包括日志类型、对应的事务号、修改的文件等等。

Pg_xlogdump参数使用说明如下:

在pg_xlog目录下找到对应的日志文件, XLOG文件名称24个字符,由三部分组成,每一部分的解析如下):

1. 第1部分是TimeLineID,

2. 第2部分是逻辑文件ID,

3. 第3部分是物理文件ID

pg_xlogdump ./000000010000000000000004 -n

LSN:日志编号

prev:对应该条记录的上一条xlog记录。

xid:事务的xid

desc:对日志的详细描述

通过pg_xlogdump可以查看xlog日志记录的操作的xid和lsn,就可以在数据库崩溃后,使用xid进行恢复等操作以及定位错误等。

pagehack和pg_xlogdump工具在定位分析问题是常用的两种工具,希望这两种工具的介绍,能帮助大家再分析解决问题的时候,提高效率。本文章中设计的页面结构详细信息,后期会专门写一篇文章介绍,加深大家的理解。

本文分享自华为云社区《GaussDB(DWS)存储系列之pagehack&pg_xlogdump工具使用方法总结》,原文作者:AndyCao 。

点击关注,第一时间了解华为云新鲜技术~

数据库的两个好帮手:pagehack和pg_xlogdump的更多相关文章

  1. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  2. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...

  3. Sybase数据库:两个特别注意的地方

    Sybase数据库:两个特别注意的地方 一.字段别名 字段别名不能为查询条件中的列名,会导致查询出来的数据不准确:最好字段别名为非列名: 二.更新的表名的大小写 update a set .... s ...

  4. 【sql】mysql数据库做两条数据替换的操作,不使用第三方变量

    需求: 1.将数据库中两条数据中的唯一约束列  做值的替换 原始思想: 将两条数据查出来,在程序中设置第三方变量,进行两条数据的替换,然后将原始两条数据删除,将新的两条替换后的数据插入. 新思想: 1 ...

  5. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  6. select在数据库中有两种含义

    select在数据库中有两种意思 (1)是赋值的意思(2)是输出,打印的意思我想你问的大概是赋值吧print和 select在数据库中都有打印输出的意思 用法是:select @aa=select* ...

  7. Android开发之使用sqlite3工具操作数据库的两种方式

    使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...

  8. jsp中使用动态数据进行mySQL数据库的两种操作方法

    使用动态数据进行数据库内容的增删改查操作有两种方法: 在此定义数据库连接为conn 假设有表单进行数据输入并提交到处理页面一种是使用预编译格式: 其格式如下: String name = reques ...

  9. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  10. 论MySQL数据库中两种数据引擎的差别

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定. 基本的差别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持. MyISAM类型的表强 ...

随机推荐

  1. 基于LangChain的LLM应用开发2——模型、提示和输出解析

    本次会讲解LangChain的三个基本组件:模型.提示和解析器. 名词解析 模型(Models):是指作为基础的大语言模型.LangChain中通过ChatOpenAI或者AzureChatOpenA ...

  2. tunm, 一种对标JSON的二进制数据协议

    Tunm simple binary proto 一种对标JSON的二进制数据协议 支持的数据类型 基本支持的类型 "u8", "i8", "u16& ...

  3. Android Kotlin 协程初探

    1 它是什么(协程 和 Kotlin协程) 1.1 协程是什么 维基百科:协程,英文Coroutine [kəru'tin] (可入厅),是计算机程序的一类组件,推广了协作式多任务的子程序,允许执行被 ...

  4. 如何借助python第三方库存取不同应用程序的用户名、密码

    在之前的一系列文章中,小爬分享了很多用Pywin32.uiAutomation.sap Gui Script等技术实现应用程序或者Web网站(如SAP.Excel.outLook邮件系统.OA系统)的 ...

  5. 【re】[NISACTF 2022]string --linux下的随机数

    附件下载,查壳 发现是ELF程序,64位,ida打开分析 flag函数点进去 前面一堆代码其实都不重要,直接看主要代码:  puts("The length of flag is 13&qu ...

  6. Net 高级调试之十:轻量级代码生成的调试

    一.简介 今天是<Net 高级调试>的第十篇文章.说起来,高级调试,调试的内容还是挺多的,技巧也不少,但是,要想做一个合格的高级调试人员,还需要掌握如何调试动态生成的IL代码.今天要探讨的 ...

  7. H5自适应

    一.设置html的font-size,使用rem作为单位 假设设计稿宽度750px,屏幕宽高750px, 1.1rem=屏幕宽度/设计稿宽度*100px,适合用px表示宽度 1rem=100px re ...

  8. [ABC328D] Take ABC 题解

    题目翻译 题目描述 给你一个字符串 \(S\) 包含 A.B 和 C 三个不用的字符. 只要字符串 \(S\) 中包含连续的 ABC 就将 ABC 删除掉 再字符串 \(S\) 不能操作之后输出这个字 ...

  9. Linux笔记02: Linux环境_2.1虚拟机软件VMware

    2.1 虚拟机软件VMware 如果直接在计算机上安装多个操作系统,同一个时刻只能运行一个操作系统,切换系统需重启计算机.VMware可以使用户在一台计算机上同时运行多个操作系统(如Windows.L ...

  10. spring cloud生态中Feign、Ribbon、loadbalancer的一些历史

    背景 本意是想写个feign中loadbalancer组件和nacos相遇后,一个兼容相关的问题,后面发现Feign这套东西很深,想一篇文章写清楚很难,就先开一篇,讲历史. Feign.OpenFei ...