技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Oracle --> oracle数据库的CPU/IO信息采集

oracle数据库的CPU/IO信息采集

浏览:2554次  出处信息

    CPU时间采集

    从10G开始,oracle引入了时间模型,我们可以从oracle的角度来看CPU的使用程度

    先说说几个概念

    db time:oracle数据库消耗的时间,这个范围比较大,包括了CPU使用,等待IO子系统返回,网络处理等

    db cpu:指oracle单纯消耗CPU,做CPU运算的时间,关于IO,网络的等待都不在这个范围内,用它来统计真实CPU的消耗比较准确

    CPU TIME:这个是我取的名字,表示CPU能给你提供的最大时间,比如你有4个cpu/core,那么1小时内,CPU TIME就是4X60分钟

    我通过一个测试脚本来看看oracle里面关于CPU时间的统计

    #killcpu.sh

    #!/bin/sh

    export ORACLE_SID=innodb

    export ORACLE_HOME=/opt/oracle/products/11.2.0

    $ORACLE_HOME/bin/sqlplus /nolog <<_kof_

    connect iops/iops@innodb

    declare v_count pls_integer := 0;

    begin

     for x in 1..400000000 loop

     for d in 1..400000000 loop

     for c in 1..400000000 loop

     v_count :=mod(c, mod(x,d));

     end loop;

     end loop;

     end loop;

    end;

    /

    _kof_

    测试机器是Intel(R) Xeon(R) CPU E7530的4C6核 CPU,虚拟出来总共是48个core

    killcpu采用24并发,48并发,60并发做测试,每个10分钟,通过statspack收集信息,按照上面的公式,我们的cpu time=10min*60 * 48core=28800秒

    最终结果如下(时间单位都是秒):

并发数 db time db cpu cpu time top显示CPU占用率 LOAD
24 14066 14064 28800 50 24
48 27984 27401 28800 100 48
60 34556 27179 28800 100 57

    从结果可以看出:

    24并发,oracle使用了24个core,整体的CPU占用率在50%,load在24,非常准确,此时db time基本和db cpu一致,因为你干的所有事情,都是在CPU上

    48并发,oracle使用了48个core,CPU使用率达到100%,oracle在多cpu环境下对资源的利用确实很高,此时db time,db cpu,cpu time一致了,CPU在满负荷运转

    60并发,这个时候会发现,db cpu没变,因为CPU已经耗尽,没得涨了,db time现在已经远大于cpu time和db cpu,这说明我们有一部分的程序根本抢不到CPU,进入了

    等待,load也超过了core数量,达到57

    通过db cpu/db time,我们可以看出这个数据库是否是CPU使用很重的应用,比如大量的运算,latch争用等,

    如果是一个IO很重的应用,会发现db cpu站的比例会很小

    IO负载统计

    IO表现在两个方面,IOPS和吞吐量,我们OLTP系统,一般比较关心IOPS,及每个IO的响应时间,

    以前针对IOPS统计,我们一直是按照statspack的physical reads+physical writes来统计,这个是很不准确的

    按照文档的解释:

    physical reads:Total number of data blocks read from disk

    这个是按照block读取的数量来统计的,oracle的IO种类有很多,如果是scatter read或者parallel read,一个IO会读取多块的,

    这样计算IOPS会偏大,重新调整后,发现统计出来的曲线和从存储段观察的比较吻合

    9I:

    -IOPS&MBPS

    select sum(iops) as iops,sum(mbps) as mbps

    from (

    select sum(phyrds + phywrts) as IOPS,

    sum(phyblkrd + phyblkwrt) as MBPS

    from (select a.phyrds,a.phywrts,a.phyblkrd * b.block_size / 1024 / 1024 as phyblkrd,a.phyblkwrt * b.BLOCK_SIZE / 1024 / 1024 as phyblkwrt

    from v$filestat a,v$datafile b

    where a.file# = b.file#)

    union all

    select sum(decode(name,’redo writes’,value,’0′)) as IOPS,

    sum(decode(name,’redo size’,value,’0′)) / 1024 / 1024 as MBPS

    from v$sysstat where name in( ‘redo writes’,\'redo size’));

    10G/11G

    -IOPS&MBPS

    select sum(decode(name,’physical read IO requests’,value,’physical write IO requests’,value,0)) as iops,

    sum(decode(name,’physical read bytes’,value,’physical write bytes’,value,0)) / 1024 / 1024 as mbps

    from v$sysstat

    where name in (’physical read IO requests’,\'physical write IO requests’,

    ‘physical read bytes’,\'physical read total bytes’,

    ‘physical write bytes’,\'physical write total bytes’,\'physical read total IO requests’,\'physical write total IO requests’

    );

    最近将这些统计指标做进了监控系统,看看效果怎么样

建议继续学习:

  1. 关于IO的同步,异步,阻塞,非阻塞    (阅读:14294)
  2. Linux如何统计进程的CPU利用率    (阅读:14096)
  3. 解剖CPU    (阅读:7920)
  4. Linux服务器性能评估    (阅读:7899)
  5. 提升磁盘IO性能的几个技巧    (阅读:7521)
  6. I/O模型-读书笔记    (阅读:6777)
  7. Innodb IO优化-配置优化    (阅读:6410)
  8. 查看 CPU, Memory, I/O and NetFlow    (阅读:6236)
  9. blktrace 深度了解linux系统的IO运作    (阅读:5930)
  10. Linux操作系统内核3.3版本I/O Stack的流图    (阅读:5709)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1