Programas
Programas responde a dos preguntas: qué código SAP ha consumido más tiempo
en la ventana seleccionada y qué ejecución concreta conviene investigar. Usa
registros estándar de estadísticas ABAP leídos mediante
SWNC_GET_STATRECS_FRAME; no estima una ejecución a partir de los sondeos de
Work Process.
Empezar por el ranking
Selecciona un SAP, rango temporal y, si hace falta, host en la barra global. La lista inicial ordena por Consumo total de respuesta, de mayor a menor. Así aparecen primero los programas que más tiempo acumulado han consumido, aunque una ejecución individual no sea la más lenta.
El selector visible Orden permite ordenar por última ejecución, número de ejecuciones, respuesta p95, consumo total de respuesta, tiempo total o medio de base de datos, evolución y dumps relacionados. Puedes invertir cualquiera de ellos con la dirección ascendente o descendente; SPOT aplica orden y dirección al resultado completo en el servidor. Los accesos rápidos permiten empezar por:
- mayor consumo acumulado;
- ejecuciones más lentas por p95;
- mayor coste de base de datos;
- programas que empeoraron frente al periodo anterior equivalente;
- actividad más reciente;
- programas con dumps relacionados.
Cada shortcut selecciona un orden concreto del catálogo. La búsqueda es textual sobre el nombre SAP; el nombre exacto sigue siendo la identidad del programa. Cliente y tipo de actividad se conservan como dimensiones de las ejecuciones, no como programas distintos.
El backend ordena siempre todo el resultado filtrado antes de paginar y desempata por nombre exacto. Por eso Siguiente continúa el mismo orden global: la UI no reordena sólo los elementos visibles. Para mantener esa respuesta estable con rangos de gran volumen, SPOT calcula resúmenes acotados por programa en vez de transferir cada ejecución para formar el catálogo. Los filtros, el orden y la paginación conservan el mismo alcance global.

Leer las medidas
| Señal | Cómo interpretarla |
|---|---|
| Response | Tiempo total del registro estadístico SAP. |
| CPU | Tiempo de CPU independiente; no se suma a Response como otro componente. |
| Database | Tiempo observado desde la interfaz de base de datos del servidor de aplicaciones. No es una traza SQL ni tiempo puro del motor. |
| Wait | Espera que SAP haya incluido en el registro. |
| Load | Carga/generación registrada por SAP. Sólo aparece cuando están presentes todos sus componentes requeridos o un valor de carga legacy explícito; no es tiempo de procesamiento ABAP. |
SPOT convierte uniformemente los tiempos crudos soportados de SAP desde microsegundos a segundos; la UI usa milisegundos por debajo de un segundo. Una ejecución nueva sólo muestra CPU, Wait y Load cuando su procedencia temporal está verificada. En registros históricos sin una procedencia reconocida, SPOT conserva Response y Database válidos, omite esos tres componentes, marca Partial timing y muestra un aviso. No adivina la unidad por la magnitud ni rellena el histórico, y no presenta el procesamiento ABAP como una nueva medida.
Un valor no disponible se muestra como desconocido, nunca como cero. p50, p95, medias y comparaciones usan sólo ejecuciones con una medida válida y muestran el tamaño de la muestra. Evolución compara dos ventanas de igual duración y los mismos filtros; SPOT sólo muestra dirección cuando hay al menos 20 muestras válidas en cada una.
Un programa puede aparecer como Observed only si SPOT lo ha visto en Work Process o en un dump, pero todavía no dispone de una ejecución estadística medida. Observed context cuenta esas observaciones, no ejecuciones. La última observación conserva su propia hora y host, separados de Last execution. El número de ejecuciones permanece en cero, los tiempos quedan desconocidos y no se dibuja ninguna serie de duración inventada. Measured indica tiempos principales disponibles; Partial timing, una o más medidas ausentes.
Abrir un programa y una ejecución
Selecciona una fila para sustituir el ranking por un workspace de programa a ancho completo. Allí puedes revisar su evolución, hosts, actividad y ejecuciones recientes. Abre una ejecución para ver tiempos, contexto de Job si existe y cobertura de la evidencia. Atrás devuelve al mismo orden, filtros, página, posición y foco; el enlace se puede compartir sin perder la selección.
La investigación usa el rango completo seleccionado. Elige en el KPI de latencia entre media, p50, p95 (predeterminado) y p99. Debajo, p50/p95 y p99 opcional se dibujan sobre el tiempo real; el volumen queda alineado en una banda propia. Selecciona un intervalo temporal para aplicarlo al rango global.
Throughput observado cuenta ejecuciones sólo en la unión de intervalos que la fuente declaró cubiertos. Los huecos permanecen como huecos: esa señal no certifica la retención de SAP ni que cada host estuviera disponible. Si no hay cobertura conocida, el throughput queda sin valor, no en cero.
La distribución usa todos los Response válidos del rango completo, con 30 bins, escala lineal o logarítmica, límites numéricos y selección directa. Cero y las medidas ausentes son categorías explícitas; p50, p95 y p99 se marcan sin inventar valores. Las cohortes Todos, ≥p95, ≥p99 y [p95,p99) muestran sus límites y conteos reales.
Las muestras usan esa misma población: Representativa selecciona 20, 50 (predeterminado) o 100 ejecuciones repartidas por el rango; Reciente ofrece una página filtrada y paginada. Cambiar muestra o cohorte no recalcula los KPI. Abre una ejecución y usa Anterior/Siguiente para revisar la muestra; los enlaces a Jobs, Work Processes y Dumps conservan el contexto global.
Las tendencias de Response, Database, Wait y Load son medias independientes con sus propios conteos. CPU aparece por separado. Database describe la interfaz de base de datos del servidor de aplicaciones, no una traza SQL.

Usa los cruces según la pregunta:
- Jobs: pasos background, estado y Job Log de la ejecución elegida.
- Work Process: capacidad e infraestructura alrededor de la ventana.
- Dumps: errores ABAP temporalmente relacionados.
- DB y Metrics: presión de base de datos e infraestructura en el mismo rango.

Dependencias y contexto relacionado
En el detalle de ejecución, Dependencias aprovecha todo el cuerpo de su tarjeta. Las listas largas se desplazan dentro de esa tarjeta para que puedas llegar a la última entrada sin perder los tiempos y el contexto relacionado; en pantallas estrechas la tarjeta se apila y limita el desplazamiento a la altura disponible. Las listas cortas conservan su altura natural.
La pestaña Destinos salientes y sus contratos no cambian, pero la colección estándar actual solicita sólo registros principales. No recoge subregistros de pasos batch, RFC, HTTP o EPP: esas cuatro subcapacidades aparecen explícitamente como no disponibles y no se fabrican Jobs, dependencias ni contexto EPP. Una tabla vacía no demuestra que no hubiera llamadas.
SPOT mantiene como evidencia separada:
- Contexto relacionado: el mismo programa aparece en un Work Process o dump dentro de cinco minutos antes o después del inicio medido, acotado por el rango y host globales. Se devuelven como máximo 200 coincidencias y eso no demuestra que una causara a la otra.
Partial significa que las ejecuciones principales están completas para el
intervalo confirmado y que el enriquecimiento opcional está unavailable; no
describe un commit parcial.
El detalle de cada ejecución y el manifiesto del intervalo muestran
source_retention_window_not_reported cuando SAP no comunica cuánto historial
conserva. Es una cobertura explícita, no una estimación: SPOT no convierte esa
señal en un número de horas o días ni presenta como completo lo que pudo quedar
fuera de la retención de la fuente.
Programs no recoge texto o parámetros SQL, payloads RFC/HTTP ni el árbol interno de funciones, métodos o subrutinas ABAP. Para esa profundidad utiliza SAT, ST05 u otras herramientas SAP especializadas.
Disponibilidad y permisos SAP
La conexión usa la función RFC estándar SWNC_GET_STATRECS_FRAME del grupo
SCSM_NW_WORKLOAD; no requiere transport ni código ABAP propio. El usuario
técnico necesita el acceso S_RFC mínimo a esa función. SPOT solicita una
ventana UTC mediante el código SAP TTZZ UTC, fija READ_CLIENT al mandante
exacto de la conexión y envía READ_START_DATE/TIME y READ_END_DATE/TIME.
Antes del invoke, el descriptor debe declarar MAX_RECORDS como IMPORT INT
opcional con default -1, READ_ONLY_MAINRECORDS como IMPORT CHAR, y
ALL_STATRECS/PROTOCOL como EXPORT TABLE. SPOT envía
READ_ONLY_MAINRECORDS="X", omite MAX_RECORDS y aplica su default nativo; no
envía un límite artificial. Así conserva todos los registros principales sin
decodificar el enriquecimiento anidado opcional.
Cada ciclo relee 15
minutos de solape e intenta avanzar como máximo 30 minutos desde el cursor;
divide esa cobertura de hasta 45 minutos en hojas de como máximo 60 segundos.
El nombre IANA configurado no se envía al campo SAP TZNZONE. La compatibilidad
depende de la release, de que la función esté habilitada como remota y de la
retención configurada en SAP.
El número de registros no indica saturación: más de 500 registros válidos
pueden ser una hoja completa. El protocolo puede estar vacío o contener sólo
filas de finalización con las seis columnas estándar y RC decimal cero. Si
falta, es ambiguo, tiene otra forma o un RC distinto de cero, la hoja queda
sin confirmar; SPOT no registra el texto de error del protocolo. Una truncación explícita también deja la hoja pendiente y puede
subdividirse hasta un segundo. El connector admite hasta 32 lecturas RFC de
Programs por ventana móvil de 60 segundos entre todas las fuentes. El
presupuesto persiste tras recarga o reinicio; esperar capacidad no reserva una
conexión SAP ni inicia un worker. La continuación permanece guardada.
Cada hoja completa lleva un manifiesto para sus límites exactos. SPOT la
exporta y sólo después de su ACK confirma ese extremo; las hojas del solape se
reconcilian sin retroceder el checkpoint. Si una hoja posterior se satura,
vence el deadline, se cancela, falla la validación o no recibe ACK, esa hoja
queda pendiente y el ciclo se detiene. Las hojas anteriores ya confirmadas se
conservan y no se vuelven a consultar, también durante la primera ronda. SPOT
conserva las subventanas exactas pendientes y las reintenta con backoff. Sólo
cuando completa ese horizonte, el siguiente ciclo ordinario vuelve a leer desde
15 minutos antes del último checkpoint confirmado. Cada horizonte avanza como
máximo 30 minutos. Si el atraso supera el intervalo de colección más 120
segundos, el siguiente horizonte empieza inmediatamente; cerca del presente
vuelve la cadencia normal. Comprueba el último instante SAP confirmado y no
sólo la hora de llegada. Nunca presenta como cubierto
un tramo que no leyó. La decodificación
también queda acotada a 20.000 filas y 64 MiB por resultado RFC. Una hoja densa
completamente decodificada dentro de ese presupuesto puede confirmarse: el
número de filas no demuestra saturación. Si SAP comunica saturación o
truncación en el frame mínimo de un segundo, SPOT falla cerrado, no exporta ni
confirma esa hoja y no avanza la cobertura. En el ciclo
SPOT retiene como máximo 50.000 documentos y 32 MiB de contenido normalizado
serializado por hoja, incluido su manifiesto. Si se supera un límite, esa hoja
no se exporta ni se confirma. Estos límites de conversión y acumulación no
limitan la memoria usada dentro del invoke RFC nativo. No se
garantiza cualquier release o forma arbitraria. El diagnóstico saneado
distingue si se agotó el presupuesto de llamadas, si el
frame mínimo siguió saturado, si la ventana era inválida, si se superó el
presupuesto agregado o si hubo un conflicto de identidad/sistema. Un error
genérico de una versión anterior no demuestra cuál de esas causas ocurrió.
La tarjeta de la conexión SAP puede mostrar:
partial: lectura válida con medidas principales completas y las subcapacidades opcionalesbatchstep,rfc,httpyeppno disponibles;unsupported: la release o la forma expuesta no es compatible;unauthorized: faltan permisos RFC;unavailable: SAP no estuvo disponible temporalmente;error: la lectura fue rechazada o falló con diagnóstico saneado.
Una capacidad no disponible no debe detener Metrics, Jobs, Work Processes, dumps, RFC failures, Certificates ni el heartbeat.
Cuando una ronda válida termina con estado supported o partial, SPOT
exporta primero toda la ronda, confirma su checkpoint y después retira del pool
compartido por fuente SAP el handle usado por esa ronda. Ese handle pudo haber
sido reutilizado antes por otra familia de colección; por eso, una colección
posterior de Programs o de cualquier otra familia puede tener que reconectar.
La política de pooling de las demás familias no cambia y esto no implica una
sesión nueva en cada ronda. partial describe la cobertura opcional, no un
commit incompleto. Retirar el handle tampoco garantiza que el runtime RFC
nativo libere memoria o reduzca RSS inmediatamente.
Aislamiento y continuidad
Cada intento de Program statistics usa como máximo un worker global del mismo connector firmado. Antes de iniciar el hijo, la admisión de la fuente tiene un límite independiente de 30 segundos. Sólo después de obtenerla procesa una subventana, con un presupuesto completo de 240 segundos y reservas finitas para terminar y recoger el worker. La subventana nunca hereda el tiempo restante de otra lectura. Si la admisión vence o se cancela, no se ejecuta el worker, no se subdivide la ventana, no se exporta, no se confirma ACK ni se mueve el cursor; la siguiente fuente en cola puede continuar. Tras el ACK de una subventana, la continuación se reencola de inmediato y da turno primero a las otras fuentes pendientes. La exportación tiene un plazo separado y no resta tiempo a la siguiente RFC. El padre conserva sólo fase y duración. En consulta del descriptor, preparación de parámetros, selección de outputs, invocación y decodificación, duración cero indica entrada y una duración positiva indica finalización, incluso si no llega el terminal. Estas fronteras no incluyen valores RFC, identidades ni payloads. Son una pista diagnóstica: no validan datos ni permiten exportar, recibir ACK o avanzar el checkpoint. Si el hijo alcanza exactamente su deadline de 240 segundos y la subventana activa aún es divisible, el coordinador no exporta y mantiene intactos el cursor y los ACK previos. Sustituye duraderamente sólo esa subventana por dos mitades contiguas, conserva el resto de la cola y su backoff, y vuelve a repartir el trabajo sin esperar otro intervalo. Una cancelación por actualización o recarga prevalece, nunca autoriza esta división y se muestra como cancelación de la colección; un reporte realmente ausente sigue siendo un error. Metrics, Work Processes, Jobs y las demás familias prioritarias conservan su planificación independiente.
Las subventanas parten de un máximo de 60 segundos por fuente. Si una lectura completa tarda al menos 60 segundos o devuelve más de 400 registros principales, SPOT reduce a la mitad el máximo de esa fuente para las lecturas pendientes, hasta un segundo. Exactamente 400 registros no activan la reducción y todas las ejecuciones de la hoja aceptada se conservan. La reducción sobrevive a reinicios, no cambia cobertura ya confirmada y no se comparte con otro SAP. Ocho hojas seguidas del tamaño aprendido, completas, confirmadas y rápidas (menos de diez segundos, hasta 100 registros principales y 8 MiB normalizados cada una) permiten duplicar el máximo hasta 60 segundos en el siguiente horizonte. Un fallo reinicia la racha; timeout o saturación impone 15 minutos sin crecimiento. Las hojas menores pueden requerir más RFC; al alcanzar 32 admisiones en 60 segundos, la continuación durable espera capacidad. Una subventana pequeña que sigue alcanzando el límite es un bloqueo real, no una recuperación. Esta adaptación reduce el working set esperado, pero no garantiza un techo universal de memoria para todos los SAP.
Este worker no cambia Job Logs: su BAPI sigue ejecutándose directamente y no crea hijos. La memoria mostrada por el diagnóstico es el máximo observado en los instantes de muestreo; compárala por separado con la presión de cgroup. La diferencia frente al heap Go es una estimación residual, no memoria nativa medida directamente.
Si no aparecen programas
- Confirma el mismo SAP y rango en la barra global; amplía el rango si la retención de estadísticas de SAP es corta o acabas de activar la colección.
- Revisa SAP connections > Program statistics, su último check y capacidad.
- Si aparece
unauthorized, revisaS_RFCparaSWNC_GET_STATRECS_FRAMEcon el equipo Basis. - Si aparece
partial, usa las medidas principales completas y comprueba quebatchstep,rfc,httpyeppfiguran como no disponibles; una relación ausente no significa “no hubo llamada”. - Si el estado es
unsupported, valida la release y las funciones remotas disponibles; no instales un artefacto Z para forzar el resultado. - Confirma que el connector conserva heartbeat y que las demás colecciones avanzan. Un heartbeat aislado no demuestra que los ciclos sigan completando. Un vacío válido debe verse como Sin datos, no como ceros.
- Comprueba que ABAP dumps mantiene un último check reciente aunque no haya documentos nuevos. La ausencia de dumps sólo es evidencia favorable si su recolector sigue ejecutándose. Correlaciona un deadline de Programs con la hora del dump antes de atribuirlo; no uses sólo el contador histórico.
- En Elasticsearch no gestionado, si bootstrap informa
program_template_update_required, actualiza el template externo con los campos de Programs. Es un preflight independiente detemplate_update_requiredde Job Logs: no deshabilita logs de Jobs que ya tengan mappings válidos.
Si el agent sufre presión de memoria
Evalúa el proceso completo. Comprueba RSS/PSS, eventos memory.high, PSI,
duración y resultado de Program statistics, y que las otras siete
colecciones siguen avanzando. Reclaim sostenido sin OOM no demuestra por sí solo
una fuga de heap ni un bucle nativo.
Si necesitas recuperar continuidad, deshabilita temporalmente sólo Program statistics en la conexión afectada, conserva una copia de la configuración anterior y deja las demás colecciones habilitadas. Instala una versión corregida y soportada del connector, mide el proceso completo con carga SAP real frente al headroom del host y confirma que todas las familias avanzan antes de volver a habilitarla. Mantener Programs deshabilitado es una mitigación temporal, no una solución ni una validación de estabilidad. No aumentes el heap o los límites de recursos como primer paso. Consulta el perfil de recursos del agente: un override temporal no prueba que la unidad firmada esté instalada ni que Programs sea estable.
Los registros estadísticos y sus subregistros dependen de la configuración y retención del SAP. SPOT no puede reconstruir datos que SAP ya haya eliminado.