隨筆 - 39  文章 - 1  trackbacks - 0
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            CPU時間采集

            從10G開始,oracle引入了時間模型,我們可以從oracle的角度來看CPU的使用程度 oracle培訓

            先說說幾個概念

            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’

            );

            最近將這些統計指標做進了監控系統,看看效果怎么樣

          posted on 2013-09-03 17:49 親愛的小孩 閱讀(215) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 拉萨市| 阿城市| 常宁市| 赣州市| 漳浦县| 南通市| 建阳市| 高碑店市| 曲靖市| 文化| 黑河市| 神池县| 琼中| 云龙县| 兴山县| 辽阳市| 濉溪县| 江华| 吴江市| 子洲县| 常宁市| 本溪| 沈丘县| 曲阳县| 神农架林区| 九台市| 定日县| 桐柏县| 华坪县| 伊川县| 德昌县| 中卫市| 平原县| 麟游县| 北辰区| 大厂| 乌兰县| 岢岚县| 天祝| 柞水县| 孟村|