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

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

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

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

busy_ticks / (idle_ticks + busy_ticks)

它是否正确?

11 月 8 日更新

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

有帮助吗?

解决方案

如果可用,您需要包含“IOWAIT_TICKS”。

IDLE_TICKS-处理器已闲置的一秒钟数量,总计在所有处理器上

BUSY_TICKS - 百分之一秒的数 处理器一直忙于执行 用户或内核代码,总计 处理器

IOWAIT_TICKS - 百分之一秒的数目 处理器一直在等待 I/O 完整,总 LED 总 处理器

这是一个查询。

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 了解更多信息。

其他提示

我不相信我需要包含 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 似乎是必要的。

想想看,如果我的目的是了解总体机器负载,我可能最好在分子和分母中包含 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 争用或等待率较高,我不会被误导,并且会通过运行更多作业来加剧问题。

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

您对“忙碌”值的看法是正确的。我检查了我的一个系统,Busy 等于 User + Sys。

我还确认了我的系统上所有时间都处于忙碌和空闲状态(我的系统没有 IOWAIT)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top