天天看點

從redo日志分析資料庫的profile

postgresql , pg_xlogdump , 資料庫profile

在postgresql中檢視top sql是比較友善的,如下:

<a href="https://github.com/digoal/blog/blob/master/201704/20170424_06.md">《postgresql 如何查找top sql (例如io消耗最高的sql)》</a>

而從另一個角度,比如redo檔案,我們也能分析出每個時間段資料庫的操作類型,分析資料庫資源消耗,以及提出優化建議。

要檢視redo日志,不得不提pg_xlogdump,原理和介紹詳見如下

<a href="https://github.com/digoal/blog/blob/master/201302/20130223_01.md">《postgresql xlog dump - pg_xlogdump 源碼講解》</a>

我們簡單的看看某個redo檔案的内容:

rmgr是指這筆redo record的類别,後面是長度等資訊。

通過以下指令,可以統計每個資源有多少筆redo記錄,描述是什麼?

這個日志可以看出什麼問題呢?

比如我們可以看到gin的redo非常多,說明使用者使用了gin索引,同時這個索引的寫入,更新非常頻繁。

對于這種情況,使用者可以設定gin索引的fastupdate特性,同時調大vacuum naptime,以及調大表的vacuum門檻值,盡量的減少gin的合并頻率,(但是fastupdate會降低檢索性能)。

其他,

如果你看到vacuum非常多,說明這些redo中包含大量的垃圾回收資訊,使用者可能産生了較多垃圾,正在被回收。

如果是vacuum freeze較多,說明當機較多,使用者可以修改一下當機周期,減少這種redo。

<a href="https://github.com/digoal/blog/blob/master/201510/20151210_01.md">《postgresql 使用pg_xlogdump找到誤操作事務号》</a>