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