Pergunta
A visão da Oracle V $ OSSTAT detém algumas estatísticas operacionais, incluindo:
- IDLE_TICKS Número de centésimos de segundo que um processador tenha sido ocioso, totalizaram mais de todos os processadores
- BUSY_TICKS Número de centésimos de segundo que um processador tenha sido ocupado executando usuário ou código do kernel, totalizaram mais de todos os processadores
A documentação que eu li não foi clara quanto a saber se estes são sempre repor. Alguém sabe?
Outra questão que tenho é que eu gostaria de trabalhar para fora a carga da CPU média do sistema está experimentando. Para fazer isso espero que eu tenho que ir:
busy_ticks / (idle_ticks + busy_ticks)
É este correto?
Atualização de 08 de novembro
Oracle 10g R2 inclui uma estatística chamada CARGA nesta tabela. Ele fornece a carga atual da máquina como no momento o valor é lido. Isto é muito melhor do que usar as outras informações como os dados * _ticks é "desde exemplo start" não como do ponto atual no tempo.
Solução
Você vai precisar incluir 'IOWAIT_TICKS` se eles estiverem disponíveis.
IDLE_TICKS - Número de centésimos de segundo que um processador tenha sido ocioso, totalizaram mais de todos os processadores
BUSY_TICKS - Número de centésimos de segundo que um processador tem sido ocupado executando usuário ou do kernel de código, totalizaram mais de tudo processadores
IOWAIT_TICKS - Número de centésimos de segundo que um processador tem estado à espera de I / O completo, total levou mais de tudo processadores
Aqui está uma 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;
Em 10.2 e mais tarde os _TICKS nomes foram alterados para _time.
Os valores acumulados em exibições dinâmicas são repostas quando a instância do banco de dados é desligado.
automática Desempenho Estatísticas v $ OSStat para mais informações .
Outras dicas
Não estou convencido eu preciso incluir USER_TICKS e SYS_TICKS.
A documentação para BUSY_TICKS afirma:
"...been busy executing user or kernel code, totalled over all processors"
o que sugere que BUSY_TICKS já inclui USER_TICKS e SYS_TICKS.
Mesmo para NICE_TICKS - que ainda é tempo do usuário (apenas prioridade mais baixa).
Incluindo IOWAIT_TICKS parece provável que seja no entanto necessário.
Venha para pensar sobre isso, se meu objetivo é ter uma noção de carga geral da máquina, eu provavelmente estaria melhor incluindo IOWAIT_TICKS no numerador e denominador, para ter uma noção da quantidade de tempo de CPU não está disponível para o meu trabalho.
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;
Isto assegura que se a máquina tinha uma alta taxa de IO contenção ou em espera, eu não seria enganar e gostaria de acrescentar para o problema, executando mais empregos.
Depende da sua perspectiva. Saber o que você está depois, eu acho que você tem direito.
Você está correto sobre o valor ocupado. Eu verifiquei um dos meus sistemas e está ocupado igual ao usuário + Sys.
Eu também confirmou que conta Ocupado e Inativo por todo o tempo no meu sistema (o meu sistema não tem iowait).