數據庫的兩個好幫手: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 。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章