zoukankan      html  css  js  c++  java
  • statspack系列4

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-4/

    作者:Jonathan Lewis

    使用statspack的一个方式是从数据中抽取出来趋势信息,两年前在我的网站上发布了一些样例的sql,这些sql用来完成这样的任务。

    一种方式是生成一个快照,就执行一下spreport.sql脚本,然后使用grep(unix)或者find(windows)从产生的结果文件结合中抽取数据,举个例子,系统当前有过度的I/O和cpu尖刺,我会检查一下系统当前有哪些正在进行 table scans 或者scattered read。如果我已经积累了statspack报告的归档,你们我就可以很容易的得到趋势报告:

    grep "table scan rows gotten" sp*.txt      
     
    Statistic                                  Total      per Second      per Trans
    sp_17011430.txt:table scan rows gotten    67,522,182    75,024.7      166.0
    sp_17011445.txt:table scan rows gotten    60,288,793    66,987.6      168.3
    sp_17011500.txt:table scan rows gotten    68,181,066    75,672.7      154.8
    sp_17011515.txt:table scan rows gotten    68,845,922    76,580.6      207.2
    sp_17011530.txt:table scan rows gotten   132,836,448   147,432.2      422.4
    sp_17011545.txt:table scan rows gotten   134,103,072   149,003.4      430.5
    sp_17011600.txt:table scan rows gotten   454,254,201   504,726.9    1,381.8
    sp_17011615.txt:table scan rows gotten   218,650,324   243,215.0      577.1
    sp_17011630.txt:table scan rows gotten    76,841,570    85,379.5      208.6
    sp_17011645.txt:table scan rows gotten    66,468,544    73,853.9      199.4

    在这个报告中,我插入了头信息,来清楚的看到数字的意思,如果仅仅使用grep的话是没有这部分信息的。

    我已经设置了这个系统按照月/天/小时/分钟来作为文件名称的格式,可以看出结果是从15分钟快照的集合中产生的,按照命名的习惯,grep命令刚好按照正确的顺序得出结果。

           在这个例子中,可以看到在3:15 pm到4:15 pm中有一些异常,峰值在4:00pm左右,平均下来 每个事物的table scan的量迅速的上升。在这个时间上可以看下statspack的其他信息是否和这部分一致,仔细检查一下在4:00 pm时间的statspack的整体报告,看看是否有一些特殊的任务在执行。

      定时的自动调用spreport.sql, 并产生合适的文件名,可以使用下面的脚本。

    execute statspack.snap(5)    
     
    column  begin_snap  new_value   begin_snap
    column  end_snap    new_value   end_snap
    column  report_name new_value   report_name    
     
    column  instance_number new_value   instance_number
    column  dbid        new_value   dbid    
     
    select dbid from v$database;
    select instance_number from v$instance;    
    
    select  begin_snap, end_snap, 'sp_' || snap_time || '.txt' report_name
    from    (
         select
            lag(snap_id,1) over(order by snap_id)   begin_snap,
            snap_id                 end_snap,
            lead(snap_id,1) over(order by snap_id)  next_snap,
            to_char(snap_time,'mmddhh24mi')     snap_time
         from   stats$snapshot
         where  dbid        = &dbid
         and    instance_number = &instance_number
        )
    where
        next_snap is null
    ;    
    start ?/rdbms/admin/spreport    

    这个脚本执行一个snapshot,然后找到相邻的两个snapshot的id,根据后面的snapshot的时间戳建立文件名称,这个脚本命名为spreport.sql。

    很明显,不能通过dbms_job来执行这个脚本,可以选择其他的方式,如果使用10g,可以选择dbms_scheduler。

  • 相关阅读:
    PowerDesigner通过SQL文件,反向生成模型
    跨域请求设置
    SSO单点登录与登出
    jwt使用
    git概念理解
    Slf4j MDC机制
    ASP.NET Core依赖注入最佳实践,提示&技巧
    EFCore数据库迁移命令整理
    RSA加密的使用
    CocoaPods 安装的第三方删除
  • 原文地址:https://www.cnblogs.com/xpchild/p/3694941.html
Copyright © 2011-2022 走看看