Вопрос

Представление Oracle V$OSSTAT содержит несколько операционных статистических данных, в том числе:

  • IDLE_TICKS Количество сотых долей секунды, в течение которых процессор простаивал, общее для всех процессоров.
  • BUSY_TICKS Количество сотых долей секунды, в течение которых процессор был занят выполнением пользовательского кода или кода ядра, общее для всех процессоров.

В документации, которую я прочитал, неясно, сбрасываются ли они когда-либо.Кто-нибудь знает?

Еще один вопрос, который у меня есть, заключается в том, что я хотел бы определить среднюю загрузку процессора, которую испытывает система.Для этого я ожидаю, что мне придется пойти:

busy_ticks / (idle_ticks + busy_ticks)

Это верно?

Обновление от 8 ноября

Oracle 10g r2 включает в эту таблицу статистику под названием LOAD.Он обеспечивает текущую загрузку машины на момент считывания значения.Это намного лучше, чем использование другой информации, поскольку данные *_ticks относятся «с момента запуска экземпляра», а не на текущий момент времени.

Это было полезно?

Решение

Вам нужно будет включить IOWAIT_TICKS, если они доступны.

IDLE_TICKS - Количество сотни секунды, когда процессор был простаивался, состоит из всех процессоров

Busy_ticks - Количество сотни секунды, в котором процессор был занят выполнением пользователя или кода ядра, составленного над всеми процессорами

Айовайт_ticks - Количество сотни секунды, которые процессор ждал завершения ввода -вывода, общее количество светодиодов над всеми процессорами

Вот запрос.

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 в числитель и знаменатель, чтобы получить представление о количестве процессорного времени, недоступного для моей работы.

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;

Это гарантировало бы, что, если бы на машине был высокий уровень конфликтов или ожиданий ввода-вывода, я не был бы введен в заблуждение и не усугубил бы проблему, запустив больше заданий.

Зависит от вашей точки зрения.Зная, чего вы добиваетесь, я думаю, вы правы.

Вы правы насчет значения «Занят».Я проверил одну из своих систем, и значение «Занято» равно «Пользователь + Sys».

Я также подтвердил, что в моей системе постоянно учитываются режимы занятости и ожидания (в моей системе нет IOWAIT).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top