Domanda
La vista Oracle V $ OSSTAT contiene alcune statistiche operative, tra cui:
- IDLE_TICKS Numero di centesimi di secondo in cui un processore è rimasto inattivo, sommato su tutti i processori
- BUSY_TICKS Numero di centesimi di secondo in cui un processore è stato impegnato a eseguire codice utente o kernel, sommato su tutti i processori
La documentazione che ho letto non è chiara per sapere se verranno mai ripristinati. Qualcuno lo sa?
Un'altra domanda che ho è che mi piacerebbe calcolare il carico medio della CPU che sta vivendo il sistema. Per fare ciò mi aspetto di dover andare:
busy_ticks / (idle_ticks + busy_ticks)
È corretto?
Aggiornamento 08 novembre
Oracle 10g r2 include una stat chiamata LOAD in questa tabella. Fornisce il carico corrente della macchina al momento della lettura del valore. È molto meglio che utilizzare le altre informazioni poiché i dati * _ticks sono " poiché l'istanza inizia " non a partire dal momento attuale.
Soluzione
Dovrai includere 'IOWAIT_TICKS` se sono disponibili.
IDLE_TICKS - Numero di centesimi di a secondo che un processore è rimasto inattivo, totale su tutti i processori
BUSY_TICKS - Numero di centesimi di secondo che a il processore è stato impegnato nell'esecuzione codice utente o kernel, sommato a tutto processori
IOWAIT_TICKS - Numero di centesimi di secondo che a il processore è in attesa di I / O completo, totale guidato su tutto processori
Ecco una query.
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;
Su 10.2 e versioni successive i nomi _TICKS sono stati cambiati in _TIME.
I valori cumulativi nelle viste dinamiche vengono ripristinati quando viene arrestata l'istanza del database.
Vedi Statistiche automatiche delle prestazioni e v $ OSStat per maggiori informazioni .
Altri suggerimenti
Non sono convinto di dover includere USER_TICKS e SYS_TICKS.
La documentazione per BUSY_TICKS indica:
"...been busy executing user or kernel code, totalled over all processors"
che suggerisce che BUSY_TICKS include già USER_TICKS e SYS_TICKS.
Lo stesso vale per NICE_TICKS, che è ancora tempo dell'utente (priorità solo inferiore).
Sembra probabile che includere IOWAIT_TICKS sia necessario.
Vieni a pensarci bene, se il mio scopo è quello di avere un'idea del carico complessivo della macchina, probabilmente starei meglio includendo IOWAIT_TICKS nel numeratore e amp; denominatore, per avere un'idea della quantità di tempo della CPU non disponibile per il mio lavoro.
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;
Ciò garantirebbe che se la macchina avesse un alto tasso di contesa o attesa IO, non sarei fuorviante e aggiungerei il problema eseguendo più lavori.
Dipende dalla tua prospettiva. Sapendo cosa stai cercando, penso che tu abbia ragione.
Hai ragione sul valore Occupato. Ho controllato uno dei miei sistemi e Occupato è uguale a Utente + Sistema.
Ho anche confermato che l'account Occupato e Inattivo per tutto il tempo sul mio sistema (il mio sistema non ha IOWAIT).