Tiempo dentro de las llamadas que no es CPU ni espera registrada significa que la sesión estaba en curso sin que Oracle midiera lo que hacía. Antes de sacar conclusiones sobre el resto del perfil, ese tiempo necesita una explicación.
Síntomas
En el Diagnóstico aparece el hallazgo Mucho tiempo dentro de las llamadas sin CPU ni espera registrada (NAO_CONTABILIZADO_DENTRO). El texto cita las causas frecuentes, pide revisar la carga de CPU del servidor en el período y termina con Ver en el perfil.
El hallazgo aparece cuando el componente tiempo no contabilizado dentro de las llamadas ocupa una parte grande del tiempo total. La gravedad es siempre alta. Aunque ese componente sea el mayor del perfil, no genera también el hallazgo de componente dominante: este hallazgo ya trata ese tiempo.
Causa
Cada llamada registra la duración (e=) y la CPU (c=). Este componente es la parte de la duración que no es CPU, ni espera registrada dentro de la llamada, ni llamada hija. Crece cuando:
- El trace no tiene esperas. En los niveles 1 y 4 del 10046 no hay líneas WAIT: el tiempo de lectura de disco, de lock y de cualquier otra espera dentro de las llamadas pasa a ser no contabilizado.
- Hay cola de CPU. Más procesos listos para ejecutarse que núcleos: la sesión espera su turno en la CPU, y ese tiempo no es CPU ni espera de Oracle.
- El servidor pagina memoria. Sin memoria libre, el sistema intercambia páginas con el disco (swap) y el proceso queda detenido.
- Hay código sin instrumentación de espera. Son partes del código que Oracle no mide como espera; el texto del hallazgo cita bucles largos de PL/SQL.
Solución
- Compruebe si el trace tiene esperas: Esperas igual a 0 en el Resumen indica un trace sin esperas. Genérelo de nuevo en el nivel 8 o 12 (niveles del 10046).
- Revise la carga de CPU del servidor en el Período del trace. La cola de CPU aparece como procesos listos por encima del número de núcleos, por ejemplo en la columna
rdelvmstato en elsar -q. Para un período que ya pasó, use el historial delsaro del monitoreo del servidor.vmstat 5 sar -q 5 12 - Revise la memoria en el mismo período: páginas intercambiadas con el disco (columnas
siysodelvmstat) indican paginación. - Busque dónde se pierde el tiempo. En Llamadas de nivel 0 más largas, busque llamadas con Duración (s) muy por encima de CPU (s); en Sentencias principales por componente, abra el grupo
tiempo no contabilizado dentro de las llamadas. - Con cola de CPU o paginación, la corrección está en el servidor: menos procesos simultáneos, más CPU o memoria, o SGA y PGA dimensionadas para caber en la memoria física.
- Si el tiempo se concentra en un bloque PL/SQL y el servidor no estaba sobrecargado, investigue el código de ese bloque.
Cómo confirmar
Genere un trace nuevo de la misma operación, con esperas y en un período en que la causa ya esté corregida. El componente tiempo no contabilizado dentro de las llamadas debe quedar pequeño, el tiempo que ocultaba aparece como espera o CPU en los otros componentes, y el hallazgo desaparece.
Si usted solo activó las esperas, el Tiempo total puede no cambiar: el tiempo solo ganó un nombre. Vuelva al perfil y ataque el mayor componente.
En el informe
En el informe de ejemplo, este componente suma el 2,3% del tiempo total, sin hallazgo. Los enlaces abren las secciones del ejemplo:
- Diagnóstico: el hallazgo y el enlace Ver en el perfil.
- Perfil, fila tiempo no contabilizado dentro de las llamadas. Haga clic en el nombre para abrir la tarjeta con Dónde mirar.
- Por clase de espera, fila No contabilizado: los dos componentes de tiempo no contabilizado sumados.
- Llamadas de nivel 0 más largas: Duración (s) y CPU (s) de cada llamada.
- Sentencias principales por componente, grupo del componente: las sentencias que más cargan ese tiempo.
- Resumen: Esperas y Período.