天天看点

从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>