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.

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top