在11g里面,视图dba_hist_osstat用来记录OS级别的time时间指标。视图dba_hist_osstat_name显示了相关的指标名称。

SYS@134.32.114.1:/dzgddb> select * from DBA_HIST_OSSTAT_NAME;

           DBID         STAT_ID STAT_NAME
--------------- --------------- ----------------------------------------------------------------
NUM_CPUS
IDLE_TIME
BUSY_TIME
USER_TIME
SYS_TIME
IOWAIT_TIME
NICE_TIME
RSRC_MGR_CPU_WAIT_TIME
LOAD
NUM_CPU_CORES
NUM_CPU_SOCKETS
PHYSICAL_MEMORY_BYTES
VM_IN_BYTES
VM_OUT_BYTES
TCP_SEND_SIZE_MIN
TCP_SEND_SIZE_DEFAULT
TCP_SEND_SIZE_MAX
TCP_RECEIVE_SIZE_MIN
TCP_RECEIVE_SIZE_DEFAULT
TCP_RECEIVE_SIZE_MAX
GLOBAL_SEND_SIZE_MAX
GLOBAL_RECEIVE_SIZE_MAX rows selected.

如上,nmu_cpu_cores是指cpu核心数,本例是32;num_cpus是指cpu核心线程数,本例是64;num_cpu_sockets是指cpu路数,也指cpu主板数,本例是4。

关键的计算公式是:

%User = USER_TIME/ (BUSY_TIME+IDLE_TIME)*
%Sys = SYS_TIME/ (BUSY_TIME+IDLE_TIME)*
%Idle = IDLE_TIME/ (BUSY_TIME+IDLE_TIME)*100
BUSY_TIME + IDLE_TIME = ELAPSED_TIME * CPU_COUNT

鉴于报表习惯,将关键指标%Idle换算为%CPU,则:

%CPU = BUSY_TIME/ (BUSY_TIME+IDLE_TIME)*100

顺带记录一下,LOAD指标记录的是snap_id起始点的OS Load值,对应AWR报告的Load Average End & Load Average Begin。

以下是最终的SQL:根据dba_hist_osstat统计CPU占用情况,顺带附上另外几个关键指标

SELECT sn.instance_number,
sn.snap_id,
to_char(sn.end_interval_time, 'YYYY-MM-DD HH24:MI') AS snaptime,
newread.value - oldread.value "physical reads",
newwrite.value - oldwrite.value "physical writes",
round((newdbtime.value - olddbtime.value) / / , ) "DB time(min)",
round((newbusy.value - oldbusy.value) /
((newidle.value - oldidle.value) +
(newbusy.value - oldbusy.value)) * ,
) "CPU(%)"
FROM dba_hist_sysstat oldread,
dba_hist_sysstat newread,
dba_hist_sysstat oldwrite,
dba_hist_sysstat newwrite,
dba_hist_sys_time_model olddbtime,
dba_hist_sys_time_model newdbtime,
dba_hist_osstat oldidle,
dba_hist_osstat newidle,
dba_hist_osstat oldbusy,
dba_hist_osstat newbusy,
dba_hist_snapshot sn
WHERE newread.stat_name = 'physical reads'
AND oldread.stat_name = 'physical reads'
AND newread.snap_id = sn.snap_id
AND oldread.snap_id = sn.snap_id -
AND newread.instance_number = sn.instance_number
AND oldread.instance_number = sn.instance_number
AND newread.dbid = sn.dbid
AND oldread.dbid = sn.dbid
AND newwrite.stat_name = 'physical writes'
AND oldwrite.stat_name = 'physical writes'
AND newwrite.snap_id = sn.snap_id
AND oldwrite.snap_id = sn.snap_id -
AND newwrite.instance_number = sn.instance_number
AND oldwrite.instance_number = sn.instance_number
AND newwrite.dbid = sn.dbid
AND oldwrite.dbid = sn.dbid
AND newdbtime.stat_name = 'DB time'
AND olddbtime.stat_name = 'DB time'
AND newdbtime.snap_id = sn.snap_id
AND olddbtime.snap_id = sn.snap_id -
AND newdbtime.instance_number = sn.instance_number
AND olddbtime.instance_number = sn.instance_number
AND newdbtime.dbid = sn.dbid
AND olddbtime.dbid = sn.dbid
AND newidle.stat_name = 'IDLE_TIME'
AND oldidle.stat_name = 'IDLE_TIME'
AND newidle.snap_id = sn.snap_id
AND oldidle.snap_id = sn.snap_id -
AND newidle.instance_number = sn.instance_number
AND oldidle.instance_number = sn.instance_number
AND newidle.dbid = sn.dbid
AND oldidle.dbid = sn.dbid
AND newbusy.stat_name = 'BUSY_TIME'
AND oldbusy.stat_name = 'BUSY_TIME'
AND newbusy.snap_id = sn.snap_id
AND oldbusy.snap_id = sn.snap_id -
AND newbusy.instance_number = sn.instance_number
AND oldbusy.instance_number = sn.instance_number
AND newbusy.dbid = sn.dbid
AND oldbusy.dbid = sn.dbid
ORDER BY sn.instance_number, sn.snap_id;

根据dba_hist_osstat统计CPU占用情况的更多相关文章

  1. 关于linux的进程中的各个线程cpu占用情况的分析和查看

    我们常常会在新开的服搭建一个游戏的server,有时候要进行压力測试,那么怎样来看呢,一般我们会通过top命令查看各个进程的cpu和内存占用情况,获得到了我们的进程id,然后我们或许会通过pstack ...

  2. linux下top命令查看cpu占用情况

    可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.退出 top 的命令 ...

  3. 查看java线程cpu占用情况的脚本

    #!/bin/bash [ $# -ne ] && exit jstack $ >/tmp/jstack.log -o THREAD,tid,time|sort -k2nr| s ...

  4. 查询进程内存,cpu占用情况。僵尸进程

    查使用内存最多的5个进程:ps aux | head -1 && ps aux | grep -v USER | sort -nr -k 4 | head -5 查使用CPU最多的5个 ...

  5. Visual Studio Profiler 跟踪检查每个exe dll 性能 执行时间 CPU占用情况的方法

  6. SQLSERVER排查CPU占用高的情况

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  7. 查看服务器内存、CPU、网络等占用情况的命令--汇总

    搭建测试环境过程中,需要对正在使用的aws服务器(实际这是一台虚拟出来的服务器),查看它在运行脚本,启动脚本时的内存,CPU,网络等使用情况 1.查看服务器cpu内核个数: -cat 每个物理cpu中 ...

  8. sql server cpu占用过高优化

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  9. Linux下内存占用和CPU占用的计算

    ->使用free命令查看内存使用情况: 1.echo 3 > /proc/sys/vm/drop_caches 2.free 或者使用cat /proc/yourpid/status 来查 ...

随机推荐

  1. CodeForces 625B War of the Corporations

    暴力匹配+一点判断 #include <stdio.h> #include <algorithm> #include <string.h> #include < ...

  2. centos 上网问题

    前言:由于Linux下很多软件安装必须网络环境下进行,因此,对于如何在VMware下进行上网,我折腾了至少三天,今天上午,也即五一劳动节,终于搜到一遍技术文章,经过自己实践,VMware下Linux的 ...

  3. PowerShell学习小结

    1. 获取所有别名信息Get-Alias 2. 获取指定别名信息Get-Alias xx 3. 通过command name获得指定别名信息Get-Alias -Definition xx-xxx 4 ...

  4. JDBC executeBatch 抛出异常停止

    进行批量更新的时候发现: addBatch(sql); executeBatch 抛出异常后,剩余的sql没有更新,即出现异常之前的都入库了,异常之后即使有可执行sql都不会执行. 百度资料后了解:这 ...

  5. partial类修饰符

    partial是一个类修饰符,用于把类定义拆分为几个部分,便于代码管理,如class ClassA{void A(){;}void B(){;}}与partial class ClassA{void ...

  6. 华为AR1220新机试用

    今天刚刚收到华为AR1220,以为直接就可以用web界面管理,结果开机后才知道web管理界面需要激活. 下面简单分享这个过程: *** 用控制台线(一边RJ45,一边9针串)连接Router cons ...

  7. Antx简介(ali_PPT)

    Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...

  8. 各种浏览器开启JavaScript脚本方法

    各种浏览器开启JavaScript脚本方法 随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站 ...

  9. java 二维码

    在http://www.ostools.net/qr看到了一个生成二维码的工具,于是就产生了一个想法: 为什么自己不做一个二维码的生成和解析工具呢?花了一个多钟的时间,嘿嘿,就做出来啦... 先来看看 ...

  10. Delphi 中的常用事件

    OnActive 焦点称到窗体或控件时发生 OnClick 鼠标单击事件 OnDbClick 鼠标双击事件 OnClose和OnCloseQuery 当关闭一个窗体时就会响应OnClose和OnClo ...