根据dba_hist_osstat统计CPU占用情况

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

[email protected]134.32.114.1:1521/dzgddb> select * from DBA_HIST_OSSTAT_NAME;

           DBID         STAT_ID STAT_NAME
--------------- --------------- ----------------------------------------------------------------
     3352298469               0 NUM_CPUS
     3352298469               1 IDLE_TIME
     3352298469               2 BUSY_TIME
     3352298469               3 USER_TIME
     3352298469               4 SYS_TIME
     3352298469               5 IOWAIT_TIME
     3352298469               6 NICE_TIME
     3352298469              14 RSRC_MGR_CPU_WAIT_TIME
     3352298469              15 LOAD
     3352298469              16 NUM_CPU_CORES
     3352298469              17 NUM_CPU_SOCKETS
     3352298469            1008 PHYSICAL_MEMORY_BYTES
     3352298469            1009 VM_IN_BYTES
     3352298469            1010 VM_OUT_BYTES
     3352298469            2000 TCP_SEND_SIZE_MIN
     3352298469            2001 TCP_SEND_SIZE_DEFAULT
     3352298469            2002 TCP_SEND_SIZE_MAX
     3352298469            2003 TCP_RECEIVE_SIZE_MIN
     3352298469            2004 TCP_RECEIVE_SIZE_DEFAULT
     3352298469            2005 TCP_RECEIVE_SIZE_MAX
     3352298469            2006 GLOBAL_SEND_SIZE_MAX
     3352298469            2007 GLOBAL_RECEIVE_SIZE_MAX

22 rows selected.

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

关键的计算公式是:

%User = USER_TIME/ (BUSY_TIME+IDLE_TIME)*100
%Sys = SYS_TIME/ (BUSY_TIME+IDLE_TIME)*100
%Idle = IDLE_TIME/ (BUSY_TIME+IDLE_TIME)*100BUSY_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) / 1000000 / 60, 2) "DB time(min)",
       round((newbusy.value - oldbusy.value) /
             ((newidle.value - oldidle.value) +
             (newbusy.value - oldbusy.value)) * 100,
             2) "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 - 1
   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 - 1
   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 - 1
   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 - 1
   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 - 1
   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;
时间: 2024-10-25 17:15:04

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

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

我们常常会在新开的服搭建一个游戏的server,有时候要进行压力測试,那么怎样来看呢,一般我们会通过top命令查看各个进程的cpu和内存占用情况,获得到了我们的进程id,然后我们或许会通过pstack命令查看里边的各个线程id以及相应的线程如今正在做什么事情,分析多组数据就能够获得哪些线程里有慢操作影响了server的性能,从而得到解决方式. 比方这种以组数据: [[email protected] bin]# pstack 30222 Thread 9 (Thread 0x7f729adc17

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

可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.退出 top 的命令为 q (在 top 运行中敲 q 键一次).top详解如下:1.作用top命令用来显示执行中的程序进程,使用权限是所有用户.2.格式top [-] [d delay] [q] [c] [S] [s] [n]3.主要参数 d:指定更新的间隔,以秒计算.q:没有任何延迟的更新.如果使用者有超级用户,则

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

查使用内存最多的5个进程:ps aux | head -1 && ps aux | grep -v USER | sort -nr -k 4 | head -5 查使用CPU最多的5个进程: ps aux | head -1 && ps aux | grep -v USER | sort -nr -k 3 | head -5 查询僵尸进程ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'ps -ef | grep defunct | g

统计CPU使用情况及查看前5名

ps aux排序 按内存升序排列:ps aux --sort=+rss 按内存降序排列:ps aux --sort=-rss 按cpu升序排列:ps aux --sort=+%cpu 为按cpu降序排列.ps aux --sort=-%cpu ps aux --sort=+%cpu | head -5 原文地址:http://blog.51cto.com/renxi/2343814

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

使用gawk记录一段时间内,某个进程占用内存和CPU的情况

很多时候,我们在后台测试程序的时候,都需要隔一段时间监控程序的内存和CPU占用情况,但是又不能经常盯着top命令的输出. 这时候就需要使用脚本来帮我们记录这些信息,方便我们监控了. 废话不多说,直接上代码: ```shell #!/bin/bash FileName="res.txt" echo "%CPU\t%MEM" > $FileName for (( i = 0; i < 10; i++ )) do output=`top -n 1 -p 1 &

SQLSERVER排查CPU占用高的情况

SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用也很高,占用了30个G -----------------------------------------------华丽的分割线-------------

工具运行过程中,CPU占用过高的分析定位

之前使用Java Swing开发了一款设备档案收集工具.支持多台设备同时收集,每个设备使用一个线程.在同时收集多台设备信息时,发现CPU占用率居然达到了97%,而且高居不下.显然这样的性能是令人无法忍受的. 我们知道,通过jdk自带的工具jvisualvm可以查看每个线程的执行情况,但就是无法分析每个线程的CPU占用情况.由于工具是运行在Windows系统上的,所以也没办法像Linux下面那样通过命令去分析线程的CPU占用.而微软的process explorer工具可以解决这一难题.通过这个强

Linux jstack分析cpu占用100%

背景: 运行测试程序后,top命令发现某个进程(pid)占用cpu达到100%. 查看哪个线程占用最多资源: ps mp pid -o THREAD,tid,命令查看这个进程下面的所有线程占用情况. 发现线程324占用最多. 使用jstack进行跟踪: jstack pid 进行查看输出到临时文件 jstack 324> test 将刚刚发现占用cpu最多的线程id(324)换算成16进制,324==>144 查看jstack 生成的文件: 下面可以看出是哪行代码导致,查看那行代码发现有死循环