Pregunta
La vista de Oracle V $ OSSTAT contiene algunas estadísticas operativas, que incluyen:
- IDLE_TICKS Número de centésimas de segundo que un procesador ha estado inactivo, totalizado en todos los procesadores
- BUSY_TICKS Número de centésimas de segundo que un procesador ha estado ocupado ejecutando el código de usuario o kernel, totalizado en todos los procesadores
La documentación que he leído no ha sido clara en cuanto a si alguna vez se restablecen. ¿Alguien sabe?
Otra pregunta que tengo es que me gustaría calcular la carga promedio de CPU que está experimentando el sistema. Para ello espero que tenga que ir:
busy_ticks / (idle_ticks + busy_ticks)
¿Esto es correcto?
Actualizar 08 de noviembre
Oracle 10g r2 incluye una estadística llamada LOAD en esta tabla. Proporciona la carga actual de la máquina en el momento en que se lee el valor. Esto es mucho mejor que usar la otra información, ya que los datos de * _ticks son " desde el inicio de la instancia " no a partir del punto actual en el tiempo.
Solución
Deberás incluir 'IOWAIT_TICKS` si están disponibles.
IDLE_TICKS - Número de centésimas de un segundo que un procesador ha estado inactivo, totalizado en todos los procesadores
BUSY_TICKS - Número de centésimas de segundo que un procesador ha estado ocupado ejecutando Código de usuario o kernel, totalizado sobre todos procesadores
IOWAIT_TICKS - Número de centésimas de segundo que un el procesador ha estado esperando que la E / S completa, total led sobre todo procesadores
Aquí hay una consulta.
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;
En la versión 10.2 y posteriores, los nombres _TICKS se han cambiado a _TIME.
Los valores acumulativos en las vistas dinámicas se restablecen cuando se cierra la instancia de la base de datos.
Consulte Estadísticas de rendimiento automático y v $ OSStat para obtener más información .
Otros consejos
No estoy convencido de que deba incluir USER_TICKS y SYS_TICKS.
La documentación para BUSY_TICKS indica:
"...been busy executing user or kernel code, totalled over all processors"
lo que sugiere que BUSY_TICKS ya incluye USER_TICKS y SYS_TICKS.
Lo mismo para NICE_TICKS, que sigue siendo tiempo del usuario (solo una prioridad más baja).
Sin embargo, parece probable que sea necesario incluir IOWAIT_TICKS.Ahora que lo pienso, si mi propósito es tener una idea de la carga total de la máquina, probablemente sea mejor que incluya IOWAIT_TICKS en el numerador & amp; denominador, para tener una idea de la cantidad de tiempo de CPU no disponible para mi trabajo.
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;
Esto aseguraría que si la máquina tuviera una alta tasa de contención o espera de IO, no me engañaría y agregaría más problemas al ejecutar más trabajos.
Depende de tu perspectiva. Sabiendo lo que buscas, creo que lo tienes bien.
Usted tiene razón sobre el valor Ocupado. Marqué uno de mis sistemas y Ocupado es igual a Usuario + Sistemas.
También confirmé que la cuenta Ocupada e Inactiva para todo el tiempo en mi sistema (mi sistema no tiene IOWAIT).