• [Oracle工程师手记]归档日志产生量太大时的简易分析手段




    有些时候,Oracle 数据库产生了大量的归档日志(archive log),用户、DBA 可能都会很困惑,哪些表被写入了?如果没有什么有力的数据来辅助说明,怎么知道是 数据库自身的问题,还是用户的问题?

    比较重量级的方法是,使用 logminer,来对 这个时间段产生的 archive log 进行解析。看看到底发生了什么。

    其实还有一种比较轻量级的方法。我们可以对这个时间段产生的 archive log 进行dump, 然后借助 awk ,来进行排序,看看哪些 object,被频繁地记录到 archive log 中。

    比如,我用这个命令,来对 arch1_77.dbf 进行 dump。

       ALTER SYSTEM DUMP LOGFILE 'u01/oracle/myhome/dbs/arch1_77.dbf';
    

     
    dump 所得到的内容,记录到了这个 session 的 trace 文件了。

    如果想要确认 trace 文件的名字,我们可以用如下的方法。

    SQL>oradebug setmypid
    SQL>oradebug tracefile_name
    

     
    这样就会显示 trace file 名字。然后我们执行类似如下的名字( 假定得到的 trace 文件名字是 orcl12201_ora_3454.trc):

    $ grep OBJ: orcl12201_ora_3454.trc |awk -F"OBJ:" '{print $2}'|awk '{print $1}' | sort |uniq -c |sort -n -r
    

     
    我执行的结果如下:

    -bash-4.1$ grep OBJ: orcl12201_ora_3454.trc |awk -F"OBJ:" '{print $2}'|awk '{print $1}' | sort |uniq -c |sort -n -r
     329829 73875
     319042 4294967295
         46 73854
          1 73858
          1 73857
          1 73856
          1 73853
          1 73852
          1 73850
          1 100
    -bash-4.1$
    

     
    要注意的是,这里列出来的 值,不一定有对应的 object,这一部分(比如下面的 329829 和 319042),可以忽略。就算一个数据库根本不忙,作出 dump ,也会产生同样的 这一两行。

    通过上面的命令,可以发现,被记录最多的是 WRP$_REPORTS_TIME_BANDS , 接下来就要分析,为何有大量的对 WRP$_REPORTS_TIME_BANDS的写入动作(我这个只是给例子,其实还称不上大量写入),遇到具体问题时,请具体分析。

    $ sqlplus / as sysdba
    
    SQL> select object_name from dba_objects where object_id in (329829,319042);
    
    no rows selected
    
    SQL> select object_name from dba_objects where object_id = 73854;
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    SYS_LOB0000007379C00009$$
    
    SQL> select object_name from dba_objects where object_id = 73585;
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    WRP$_REPORTS_TIME_BANDS
    
    SQL> select object_name from dba_objects where object_id = 4294967295;
    
    no rows selected
    
    SQL> select object_name from dba_objects where object_id = 73875;
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    TAB001
    
    SQL>
    
  • 相关阅读:
    zr#955 折纸
    zr#954 分组
    p2513 [HAOI2009]逆序对数列
    p4161 [SCOI2009]游戏
    p4593 [TJOI2018]教科书般的亵渎
    622FThe Sum of the k-th Powers
    spoj1811 LCS
    后缀自动机
    p5342 [TJOI2019]甲苯先生的线段树
    p5339 [TJOI2019]唱、跳、rap和篮球
  • 原文地址:https://www.cnblogs.com/gaojian/p/14623635.html
Copyright © 2020-2023  润新知