Вопрос
Представление 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).