數據庫的兩個好幫手:pagehack和pg_xlogdump


摘要: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 。

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM