Lacunas entre as chamadas são tempo que nenhuma linha do trace cobre. Na maioria das vezes, a falha está na medida: trace sem esperas, ligado no meio da operação ou com arquivo faltando.
Sintomas
No Diagnóstico, aparece o achado Lacunas de tempo entre chamadas (NAO_CONTABILIZADO_ENTRE). O texto diz que há tempo entre chamadas de nível 0 sem espera registrada, sugere trace ligado e desligado no meio da sessão ou processo parado fora do banco, e termina com Ver no perfil.
O achado aparece quando o componente tempo não contabilizado entre chamadas ocupa uma parte grande do tempo total. A severidade é sempre média. Quando ele também concentra a maior parte do tempo, aparece junto o achado tempo não contabilizado entre chamadas domina o tempo de resposta (componente dominante).
Causa
R vai do início da primeira chamada ou espera até o fim da última. Entre uma chamada de nível 0 e a próxima, o trace costuma registrar a espera SQL*Net message from client. Este componente é a parte de R que não está em nenhuma chamada de nível 0 nem em espera entre elas. Ele cresce quando:
- O trace não tem esperas. Nos níveis 1 e 4 do 10046 não há linhas WAIT, e todo o tempo entre chamadas, inclusive o da aplicação, cai aqui.
- O trace foi desligado e ligado de novo. O intervalo sem trace fica dentro do tempo total, sem nenhuma linha que o explique.
- O trace acaba no meio de uma chamada da aplicação. A linha de uma chamada só vai para o arquivo quando ela termina. Se o trace parou enquanto um bloco PL/SQL chamado pela aplicação ainda rodava, o EXEC dele não está no arquivo, e o tempo do bloco fora dos comandos SQL cai aqui. O aviso de chamadas recursivas sem chamada de nível 0 correspondente, no alto do relatório, mostra esse caso (caso 1).
- Falta arquivo da coleta. A aplicação reparte a sessão em vários arquivos (troca de
tracefile_identifier) e só parte deles foi enviada, ou eles foram analisados separados. - O processo parou fora do banco. O processo do servidor ficou sem CPU (servidor saturado), ou a aplicação demorou sem que a espera do cliente aparecesse.
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 se o Período do Resumo bate com a operação e se o trace ficou ligado o tempo todo. Ligue uma vez, antes do início, e desligue uma vez, depois do fim (ligar o trace com o DBMS_MONITOR).
- Procure no trace as linhas
*** TRACE CONTINUES IN FILEe*** TRACE CONTINUED FROM FILE: elas marcam a troca de arquivo. Se aparecem, envie todos os arquivos juntos, como uma coleta (analisar juntos), e confira no relatório a lista de arquivos e de sessões (Coleta). - Se nada disso explica, confira a carga de CPU do servidor no período, como em tempo não contabilizado dentro das chamadas, e o que a aplicação fazia entre as chamadas.
Como confirmar
Gere um trace novo da mesma operação, com esperas e ligado do começo ao fim, ou envie a coleta completa. O componente deve ficar pequeno, e o tempo que ele escondia aparece em SQL*Net message from client ou em outra espera, e o achado some.
No relatório
No relatório de exemplo, este componente soma 4,1% do tempo total, sem achado. O relatório do caso 1, de um trace real, tem este achado (Diagnóstico do caso 1). Os links abaixo abrem as seções do exemplo:
- Diagnóstico: o achado e o link Ver no perfil.
- Perfil, linha tempo não contabilizado entre chamadas. Clique no nome para abrir o cartão com Onde olhar.
- Resumo: Período e Esperas, que traz no mesmo quadro o tempo de espera entre chamadas.
- Chamadas de nível 0 mais longas: a coluna Início (+s) mostra em que ponto do trace cada chamada começou.
- Coleta: o quadro com os arquivos e as sessões aparece no Resumo só quando a análise junta vários traces, por isso não está no exemplo.