从redo日志分析数据库的profile

简介:

标签

PostgreSQL , pg_xlogdump , 数据库profile


背景

在PostgreSQL中查看TOP SQL是比较方便的,如下:

《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》

而从另一个角度,比如REDO文件,我们也能分析出每个时间段数据库的操作类型,分析数据库资源消耗,以及提出优化建议。

redo日志长什么样

pg_xlogdump

要查看redo日志,不得不提pg_xlogdump,原理和介绍详见如下

《PostgreSQL xlog dump - pg_xlogdump 源码讲解》

我们简单的看看某个REDO文件的内容:

pg_xlogdump 000000050000159E00000095 000000050000159E00000099|less  
  
rmgr: Btree       len (rec/tot):     42/    74, tx:  891772656, lsn: 159E/95000CA0, prev 159E/94FFEC78, bkp: 0000, desc: insert: rel 1663/56867/10216768; tid 19180/150  
rmgr: Btree       len (rec/tot):     34/    66, tx:  891772656, lsn: 159E/95000CF0, prev 159E/95000CA0, bkp: 0000, desc: insert: rel 1663/56867/10906168; tid 150019/337  
rmgr: Transaction len (rec/tot):     12/    44, tx:  891772656, lsn: 159E/95000D38, prev 159E/95000CF0, bkp: 0000, desc: commit: 2017-05-04 13:15:50.262106 CST  
rmgr: Heap2       len (rec/tot):     26/    58, tx:          0, lsn: 159E/95000D68, prev 159E/95000D38, bkp: 0000, desc: clean: rel 1663/56867/10216762; blk 402406 remxid 891772032  
rmgr: Heap        len (rec/tot):     25/  8065, tx:  891772657, lsn: 159E/95000DA8, prev 159E/95000D68, bkp: 1000, desc: lock 891772657: rel 1663/56867/10216770; tid 39310/2 LOCK_ONLY EXCL_LOCK   
rmgr: Heap        len (rec/tot):     36/  8116, tx:  891772657, lsn: 159E/95002D48, prev 159E/95000DA8, bkp: 0100, desc: update: rel 1663/56867/10216770; tid 39310/2 xmax 891772657 ; new tid 122748/1 xmax 0  
rmgr: Btree       len (rec/tot):     18/  5238, tx:  891772657, lsn: 159E/95004D18, prev 159E/95002D48, bkp: 1000, desc: insert: rel 1663/56867/10216776; tid 15681/11  
rmgr: Transaction len (rec/tot):     12/    44, tx:  891772657, lsn: 159E/950061A8, prev 159E/95004D18, bkp: 0000, desc: commit: 2017-05-04 13:15:50.320538 CST  

rmgr是指这笔REDO RECORD的类别,后面是长度等信息。

通过以下命令,可以统计每个资源有多少笔redo记录,描述是什么?

pg_xlogdump 000000050000159E00000095 000000050000159E00000099|grep -v " lock "| awk '{print $2" "$16" "$17}'|sort |uniq -c|sort -n -r  
  
 178464 Gin Insert item,  
  39060 Gin Vacuum page,  
  30980 Heap2 clean: rel  
  23855 Gin Vacuum data  
  22240 Btree insert: rel  
  18068 Heap insert: rel  
  15650 Heap2 visible: rel  
   8516 Heap delete: rel  
   4057 Transaction commit: 2017-05-04  
   3727 XLOG full-page image:  
   3331 Gin Insert new  
   3026 Heap update: rel  
   1196 Transaction abort: 2017-05-04  
   1191 Gin Update metapage,  
    765 Btree vacuum: rel  
    755 Heap hot_update: rel  
    243 Gin Delete list  
     55 Btree insert_upper: rel  
     50 Btree split_r: rel  
     32 Btree unlink_page: rel  
     32 Btree mark_page_halfdead: rel  
     29 Btree reuse_page: rel  
     28 Heap2 freeze_page: rel  
     27 Standby running xacts:  
     27 Heap insert(init): rel  
     20 Heap inplace: rel  
     11 Btree delete: index  
      9 Heap2 cleanup info:  
      5 Standby AccessExclusive locks:  
      5 Btree split_l: rel  
      4 Gin Page split,  
      2 XLOG checkpoint: redo  
      2 Gin Create posting  
      1 Heap update(init): rel  

这个日志可以看出什么问题呢?

比如我们可以看到Gin的REDO非常多,说明用户使用了GIN索引,同时这个索引的写入,更新非常频繁。

对于这种情况,用户可以设置GIN索引的fastupdate特性,同时调大vacuum naptime,以及调大表的vacuum阈值,尽量的减少GIN的合并频率,(但是fastupdate会降低检索性能)。

其他,

如果你看到VACUUM非常多,说明这些REDO中包含大量的垃圾回收信息,用户可能产生了较多垃圾,正在被回收。

如果是VACUUM FREEZE较多,说明冻结较多,用户可以修改一下冻结周期,减少这种REDO。

参考

《PostgreSQL 使用pg_xlogdump找到误操作事务号》

《PostgreSQL xlog dump - pg_xlogdump 源码讲解》

《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 缓存 监控
【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
数据库运行正常,日志出现大量错误metadata changed
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
550 6
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
2061 5
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
1203 0
|
Java 关系型数据库 MySQL
JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用
以上就是JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用的基本步骤。这些步骤可能会因为你的具体需求和环境而有所不同,但是基本的思路是一样的。希望这些信息能够帮助你更好地理解和使用这些工具。
511 17
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
1155 5
图解MySQL【日志】——Redo Log
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
507 16
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
333 4

热门文章

最新文章