Tempo dentro das chamadas que não é CPU nem espera registrada quer dizer que a sessão estava em andamento sem que o Oracle medisse o que ela fazia. Antes de conclusões sobre o resto do perfil, esse tempo precisa de explicação.
Sintomas
No Diagnóstico, aparece o achado Muito tempo dentro das chamadas sem CPU nem espera registrada (NAO_CONTABILIZADO_DENTRO). O texto cita as causas comuns, pede para conferir a carga de CPU do servidor no período e termina com Ver no perfil.
O achado aparece quando o componente tempo não contabilizado dentro das chamadas ocupa uma parte grande do tempo total. A severidade é sempre alta. Mesmo quando esse componente é o maior do perfil, ele não gera também o achado de componente dominante: este achado já trata desse tempo.
Causa
Cada chamada registra a duração (e=) e a CPU (c=). Este componente é a parte da duração que não é CPU, nem espera registrada dentro da chamada, nem chamada filha. Ele cresce quando:
- O trace não tem esperas. Nos níveis 1 e 4 do 10046 não há linhas WAIT: o tempo de leitura de disco, de lock e de toda outra espera dentro das chamadas vira não contabilizado.
- Há fila de CPU. Mais processos prontos para rodar do que núcleos: a sessão espera a vez na CPU, e esse tempo não é CPU nem espera do Oracle.
- O servidor pagina memória. Sem memória livre, o sistema troca páginas com o disco (swap) e o processo fica parado.
- Há código sem instrumentação de espera. São trechos que o Oracle não mede como espera; o texto do achado cita laços longos de PL/SQL.
Resolução
- Confira se o trace tem esperas: Esperas igual a 0 no Resumo indica trace sem esperas. Gere de novo no nível 8 ou 12 (níveis do 10046).
- Confira a carga de CPU do servidor no Período do trace. Fila de CPU aparece como processos prontos acima do número de núcleos, por exemplo na coluna
rdovmstatou nosar -q. Para um período que já passou, use o histórico dosarou da monitoração do servidor.vmstat 5 sar -q 5 12 - Confira a memória no mesmo período: páginas trocadas com o disco (colunas
siesodovmstat) indicam paginação. - Ache onde o tempo some. Em Chamadas de nível 0 mais longas, procure chamadas com Duração (s) muito acima de CPU (s); em Principais comandos por componente, abra o grupo
tempo não contabilizado dentro das chamadas. - Com fila de CPU ou paginação, a correção está no servidor: menos processos ao mesmo tempo, mais CPU ou memória, ou SGA e PGA dimensionadas para caber na memória física.
- Se o tempo se concentra num bloco PL/SQL e o servidor não estava sobrecarregado, investigue o código desse bloco.
Como confirmar
Gere um trace novo da mesma operação, com esperas e num período em que a causa foi corrigida. O componente tempo não contabilizado dentro das chamadas deve ficar pequeno, e o tempo que ele escondia aparece como espera ou CPU nos outros componentes, e o achado some.
Se você só ligou as esperas, o Tempo total pode não mudar: o tempo apenas ganhou nome. Volte ao perfil e ataque o maior componente.
No relatório
No relatório de exemplo, este componente soma 2,3% do tempo total, sem achado. Os links abrem as seções do exemplo:
- Diagnóstico: o achado e o link Ver no perfil.
- Perfil, linha tempo não contabilizado dentro das chamadas. Clique no nome para abrir o cartão com Onde olhar.
- Por classe de espera, linha Não contabilizado: os dois componentes de tempo não contabilizado somados.
- Chamadas de nível 0 mais longas: Duração (s) e CPU (s) de cada chamada.
- Principais comandos por componente, grupo do componente: os comandos que mais carregam esse tempo.
- Resumo: Esperas e Período.