Oracle V $ OSSTAT

时间:2008-10-16 03:22:59

标签: oracle statistics

Oracle视图V $ OSSTAT包含一些运行统计信息,包括:

  • IDLE_TICKS处理器空闲的百分之一秒,总计超过所有处理器
  • BUSY_TICKS处理器忙于执行用户或内核代码的百分之一秒,总计超过所有处理器

我读过的文件还不清楚这些文件是否曾经重置过。有谁知道吗?

我的另一个问题是,我想计算出系统正在经历的平均CPU负载。为此,我希望我必须去:

busy_ticks / (idle_ticks + busy_ticks)

这是对的吗?

2008年11月更新

Oracle 10g r2在此表中包含一个名为LOAD的统计信息。它在读取值时提供机器的当前负载。这比使用其他信息要好得多,因为* _ticks数据是“自实例启动”以来不是当前时间点。

5 个答案:

答案 0 :(得分:4)

如果可用,您需要包含'IOWAIT_TICKS`。

  

IDLE_TICKS - 百分之一的数字   第二,处理器闲置,   总计超过所有处理器

     

BUSY_TICKS - 一个百分之一秒的数字   处理器一直在忙着执行   用户或内核代码,总计全部   处理器

     

IOWAIT_TICKS - 一个百分之一秒的数字   处理器一直在等待I / O.   完成,总计领导全部   处理器

这是一个查询。

SELECT (select value from v$osstat where stat_name = 'BUSY_TICKS') /
(
   NVL((select value from v$osstat where stat_name = 'IDLE_TICKS'),0) +
   NVL((select value from v$osstat where stat_name = 'BUSY_TICKS'),0) +
   NVL((select value from v$osstat where stat_name = 'IOWAIT_TICKS'),0)
)
FROM DUAL;

在10.2及更高版本中,名称_TICKS已更改为_TIME。

关闭数据库实例时,将重置动态视图中的累积值。

有关详细信息,请参阅Automatic Performance Statisticsv$OSStat

答案 1 :(得分:0)

我不相信我需要包含USER_TICKS和SYS_TICKS。

BUSY_TICKS的文档说明:

"...been busy executing user or kernel code, totalled over all processors"

表示BUSY_TICKS已包含USER_TICKS和SYS_TICKS。

相同的NICE_TICKS - 仍然是用户时间(只是较低的优先级)。

虽然包括IOWAIT_TICKS似乎是必要的。

答案 2 :(得分:0)

你对Busy值是正确的。我检查了我的一个系统,Busy等于User + Sys。

我还确认Busy和Idle帐户一直在我的系统上(我的系统没有IOWAIT)。

答案 3 :(得分:0)

想一想,如果我的目的是要了解整体机器负载,我可能会更好,包括IOWAIT_TICKS在分子和&分母,以了解我的工作无法获得的CPU时间。

SELECT (
(select value from v$osstat where stat_name = 'BUSY_TICKS') +
(select value from v$osstat where stat_name = 'IOWAIT_TICKS'))
/
(
   NVL((select value from v$osstat where stat_name = 'IDLE_TICKS'),0) +
   NVL((select value from v$osstat where stat_name = 'BUSY_TICKS'),0) +
   NVL((select value from v$osstat where stat_name = 'IOWAIT_TICKS'),0)
)
FROM DUAL;

这将确保如果机器具有高速率的IO争用或等待,我不会误导并且会通过运行更多工作来增加问题。

答案 4 :(得分:0)

取决于您的观点。知道你在追求什么,我认为你做得对。