3

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

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

我读过的文档并不清楚这些是否被重置。有人知道吗?

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

busy_ticks / (idle_ticks + busy_ticks)

它是否正确?

11 月 8 日更新

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

4

5 回答 5

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。

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

有关详细信息,请参阅自动性能统计信息和v$OSStat

于 2008-10-16T13:04:34.793 回答
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 似乎是必要的。

于 2008-10-16T20:31:28.573 回答
0

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

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

于 2008-10-16T22:03:11.413 回答
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 争用或等待率很高,我不会被误导,并且会通过运行更多作业来增加问题。

于 2008-10-16T23:49:54.303 回答
0

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

于 2008-10-17T01:45:25.460 回答