`
骑猪逛街666
  • 浏览: 141803 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com
分享到:
评论

相关推荐

    Oracle AWR运行日志分析工具详解.docx

    Load Profile 部分显示数据库负载概况,包括 Redo Size、Logical Reads、Block Changes、Physical Reads、Physical Writes、User Calls、Parses 等指标。 * Redo Size:每秒产生的日志大小(单位字节),可标志数据...

    Oracle数据库备份技术【入门到精通】

    - 归档模式 (ARCHIVELOG): 在这种模式下,Oracle记录所有事务的redo日志,使得数据库能够恢复到任何时间点。这是用于生产环境的推荐模式,因为它允许最大程度的数据恢复。 - 非归档模式 (NOARCHIVELOG): 此模式下...

    Oracle数据库常见维护问题手册-精典

    可以使用以下命令调整Redo日志文件的大小: ```sql ALTER DATABASE MODIFY LOGFILE GROUP 2 ('/path/to/redo02a.log', '/path/to/redo02b.log') SIZE 50M; ``` **临时表空间迁移** 临时表空间通常用于临时存储和...

    Linux 下手动创建oracle数据库

    - `logfile GROUP1('/oracle/oradata/mydb/redo1.dbf') size 10m, GROUP2('/oracle/oradata/mydb/redo2.dbf') size 10m, GROUP3('/oracle/oradata/mydb/redo3.dbf') size 10m` **总结**: 手动创建Oracle数据库...

    达梦数据库安装部署文档.docx

    * 日志文件的大小设置,数据库 redo 日志文件的大小一般设置为 2048。 * 字符串比较大小写敏感,建议在开发环境和测试环境中保持一致。 二、Linux 环境安装 * 在安装之前,需要确认打开文件数的那个参数的设置情况...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    13.1.3日志线程与联机Redo日志 13.1.4 UNDO表空间 13.2实例恢复 13.2.1 RAC的实例恢复 13.2.2实例恢复的阶段 13.3介质恢复 13.3.1介质恢复的过程 13.3.2物理坏块和逻辑坏块 13.3.3坏块的检测工具 13.3.4块...

    实验三 Oracle 数据库管理

    - 创建数据库:`create database test logfile group1 'D:\Oracle\admin\DB2\redo1a.log' size 10M, group2 'D:\Oracle\admin\DB2\redo2a.log' size 10M datafile 'D:\Oracle\admin\DB2\system01.dbf' size 300M ...

    ORACLE RAC数据库巡检表

    - **CRS软件版本**:确认CRS的版本与数据库版本兼容,且日志文件`CRSD.LOG`和`OCSSD.LOG`无异常,表明服务正常运行。 **ASM(Automatic Storage Management)** - **ASM磁盘组**:检查磁盘组的名称、冗余级别和使用...

    Oracle 10g For Linux创建数据库完全过程(截图演示)

    根据你的需求,创建必要的数据库目录,如数据文件、redo日志、控制文件等: ``` mkdir -p $ORACLE_HOME/oradata mkdir -p $ORACLE_HOME/fast_recovery_area ``` 4. **初始化参数文件(SPFILE)** 使用`dbca`...

    Oracle数据库导图.pdf

    2. **重做日志文件**:用于记录对数据库的所有更改,如`REDO01.LOG`、`REDO02.LOG`和`REDO03.LOG`。每个数据库至少有两个重做日志文件,通常以循环方式使用,以确保数据的持久性。 3. **数据文件**:包含用户数据和...

    HairOracle数据库运维手册.docx

    - **增加REDO日志组**:增加重做日志文件组的数量。 - **删除日志组**:删除不再需要的重做日志文件组。 - **日志切换**:触发手动的日志文件切换。 - **日志清理**:清除过期的重做日志文件。 - **重做日志...

    awr报告详细分析

    在AWR报告的Load Profile部分,会显示Redo Size(重做日志大小)、Logical Reads(逻辑读取次数)、Block Changes(块更改次数)、Physical Reads(物理读取次数)、Physical Writes(物理写入次数)和User Calls...

    oracle数据库性能优化

    5. **数据库缓存**:Oracle的Buffer Cache和Redo Log Buffer分别缓存数据块和重做日志信息,合理调整缓存大小和LRU(最近最少使用)策略可减少磁盘I/O。 6. **并发控制**:Oracle的锁定机制和多版本并发控制(MVCC...

    Oracle AWR 报告分析实例讲解.docx

    例如,Redo size表示redo日志的生成速率,反映了数据库的事务活动强度;Logical reads和Block changes分别表示逻辑读和物理写操作的频率,Physical reads和Physical writes则是磁盘I/O的指标。User calls、Parses和...

    Statspack工具

    Load Profile部分详细列出了数据库的负载情况,包括redo日志大小(Redosize)、逻辑读取次数(Logical reads)、块更改数量(Block changes)、物理读取次数(Physical reads)、物理写入次数(Physical writes)等...

    达梦DCA培训随堂笔记

    2. 主库模式(primary):用户可以正常访问数据库,对数据库对象的修改强制生成redo日志,在归档有效的时候,发送redo日志到备库。 3. 备库模式(standby):接收主库发送过来的redo日志,并重做日志,数据库对用户...

    AWR报告分析实例2009.doc

    Load Profile部分给出了每秒和每事务的资源使用统计,例如Redo size反映了redo日志的生成速度,Logical reads和Block changes分别代表逻辑读取和数据块的修改频率,Physical reads和writes则表示物理I/O的次数。...

    (完整word版)Oracle-GoldenGate-11g单向DDL配置实战.doc

    源端的Extract进程负责从redo日志中抽取变更,Pump进程则将这些变更传输至目标端。目标端的Replicat进程接收这些变更并将其应用到目标数据库。 对于DDL同步,源端需要运行特定的脚本来支持DDL复制,并且修改源端...

Global site tag (gtag.js) - Google Analytics