análisis

Uso de la transaccion STAD para análisis detallados

Uso de la transaccion STAD para análisis detallados 140 120 SAPMiN

Seguramente todos, en alguna ocasión, nos hemos encontrado con problemas de rendimiento en SAP en algún report o función; ya sea estándar o un desarrollo propio, y que nos gustaría poder analizarlo de forma pormenorizada de forma adicional o complementaria a lo que desarrollamos sobre la transacción SE30. O por contra nos gustaría conocer con detalle cuáles son los reports/programas/transacciones  funciones que uno o varios usuarios han ejecutado, y de forma general analizar la carga del sistema y las estadísticas de ejecución en un intervalo concreto de tiempo. Hoy os presentamos una nueva forma de hacerlo, mediante la transacción STAD.

STAD

Según entramos en la transacción STAD, se nos muestra una pantalla de selección en la que completaremos la fecha del análisis, la duración del mismo, podremos especificar un mandante concreto, el usuario o usuarios, los datos de una transacción o programa concretos, incluso un tipo de tarea (diálogo, en fondo, actualización, impresión, RFC, http, …)

Por simplicidad tomaremos un intervalo de 10 minutos, únicamente para nuestro usuario y mostrando todos los tipos de ejecución:

stad_1

En la parte superior de la pantalla de selección podremos configurar cómo se muestran los resutados, agrupándolos por diferentes criterios:

  • Según su tiempo de ejecución
  • Agrupados por transacción
  • Totales sobre transacciones

Por último, podemos añadir los datos de uso de memoria y estadísticas de aplicación, datos que normalmente suelen ser de gran interés.

Resultado

No nos queda mas que pulsar enter, y obtendremos los resultados de la medición:

stad_2

Como se puede apreciar en la imagen, aparecen todos los registros de actividad para el usuario SAPMiN en el intervalo indicado ordenados cronológicamente. Podemos observar la transacción ejecutada, el report/funciones que se han lanzado incluyendo el número de dynpro (lo cual nos permite una gran trazabilidad para analizar problemas), los tiempos de respuesta, y los consumos de red y memoria.

Si pulsamos sobre alguna de las entradas, el sistema mostrará un mayor detalle de cada uno de los campos que se muestran en el resumen. Podemos ver los tipos de tareas ejecutadas y tiempo de respuesta, análisis de uso SQL, consumo de memoria, uso de red, por ejemplo:

stad_3

stad_4

Truco:

Esta transacción nos permite seleccionar los campos que queremos que visualice el listado con los resultados. Para ello pulsaremos el botón stad_5 y aparecerá un listado seleccionable

Podremos seleccionar algunos campos muy interesantes como:

  • tiempo de CPU
  • peticiones de BBDD
  • cantidad de entradas en tablas de BBDD
  • operaciones de insert, delete, update sobre BBDD
  • número de WorkProcess de ejecución
  • y una de nuestras favoritas, Terminal ID

stad_6

Tras agregarla podremos ver el terminal desde el que se ha ejecutado la transacción. Esto es especialmente interesante por ejemplo para averiguar desde que equipo se ha lanzado una transacción concreta si por ejemplo se está haciendo uso de la característica multilogin, y un mismo hace login en equipos diferentes:

stad_7

Todas estas opciones nos permitirán analizar tanto los tiempos de respuesta, como las transacciones y reports ejecutados, los usuarios que los han lanzado, el uso de memoria y red, e incluso el equipo desde el que se ha hecho. Esto nos permitirá descubrir cuellos de botella en el rendimiento, procesos costosos en recursos, los responsables de ejecución de algunas tareas, y un largo etc de posibilidades más.

Importante: Las estadísticas de la transacción STAD, debido a su nivel de detalle, no perduran eternamente en el sistema, y son reorganizadas según el valor del parámetro stat/max_files. Este parámetro fija la cantidad de ficheros de estadísticas que se generan como máximo. Teniendo en cuenta que se genera un fichero de este tipo cada hora, un valor de 48 (que es el fijado por defecto) determina que se almacenarán los datos estadísticos con un máximo de 48 horas.

Si tienes cualquier duda o necesitas ayuda, puedes contactar con nosotros aquí.

 

TransaccionSE30

¿Cómo funciona la transacción SE30?

¿Cómo funciona la transacción SE30? 709 528 SAPMiN

¿Cuantas veces has encontrado problema de rendimiento en algunos servicios, transacciones, function modules? ¿Por donde empezar a analizarlo? ¿Cómo funciona la transacción SE30?

La transacción SE30 nos permitirá analizar el tiempo de ejecución de los diferentes bloques que componen un report, transacción o función que queramos analizar. Podremos utilizar los resultados obtenidos para optimizar el funcionamiento de éstos y mejorar de esta manera el rendimiento general en nuestro entorno SAP o prevenir cuellos de botella.
Esta transacción se incorpora con el componente SAP_BASIS y está disponible en cualquier release de motores Netweaver ABAP.

Fase 1: Ejecución y medición

El primer paso será entrar en la transacción SE30 e introducir una descripción para identificar la sesión de análisis. Posteriormente optaremos por ejecutar la transacción/report/función a analizar de forma interactiva (In Dialog), en un proceso paralelo, o planificarlo para una ejecución posterior (Schedule):

TransaccionSE30

Vamos a utilizar para el ejemplo una transacción estándar como es la SUIM, en la que realizaremos una búsqueda sencilla. Tras indicar esta transacción en el campo Transaction, nos aseguramos de que el check Eval. Immediately está marcado, y pulsamos el botón de Execute. A continuación nos aparecen la pantalla inicial de la SUIM, y la utilizamos de forma habitual:

TransaccionSUIM

TransaccionSUIM_2

Pulsamos el botoón de ejecución, y el sistema nos muestra los resultados para la selección:

TransaccionSUIM_3

Por último pulsamos el botón de retroceso hasta salir de la transacción de ejemplo y volver a la pantalla original de la SE30.

Fase 2: Evaluación de resultados

Tras obtener la medición de tiempos, pulsamos la pestaña Evaluate y vemos la sesión que acabamos de generar:

TransaccionSE30_RuntimeAnalysis

Pulsamos doble-click sobre la entrada, y nos aparece el resumen del análisis:

TransaccionSE30_RuntimeAnalysis_2

En la parte izquierda encontramos divididos por bloques de funcionalidad las llamadas con sus respectivos consumos, y en la parte derecha se despliegan las sentencias correspondientes al bloque seleccionado:

TransaccionSE30_RuntimeAnalysis_3

Si pulsamos con doble-click por ejemplo a la primera entrada, la transacción nos llevará al punto exacto en el que se encuentra dicha sentencia:

TransaccionSE30_RuntimeAnalysis_4

TransaccionSE30_RuntimeAnalysis_5

En la pestaña DB Tables podemos encontrar las tablas cuya utilización han consumido la mayor parte del tiempo de ejecución:

TransaccionSE30_RuntimeAnalysis_6

Podemos utilizar esta mecánica para identificar los puntos más problemáticos de nuestro código.

Fase 3: Implementación de correcciones

Por último, únicamente nos restaría dar solución a las áreas de mayor consumo si realmente es posible. Algunas de las soluciones más comunes suelen ser:

  • Condiciones más restrictivas en selecciones sobre tablas tanto internas como de diccionario
  • Creación de índices adicionales
  • Selects con clausulas first / top
  • Evitar full scans de tablas
  • Etc.

Tips & Tricks

Una opción muy agradecida que nos brinda la transacción SE30 es el botón de Tips & Tricks, ya que si pulsamos sobre este botón, se nos mostrará organizados por recurso, una serie de trucos y recomendaciones para optimizar el rendimiento de nuestro código:

TransaccionSE30_RuntimeAnalysis_7

Ahora que conoces como funciona la transacción SE30, esperamos que te sirva de ayuda para mejorar tu código o analizar cuantos problemas te encuentres.

Puedes dejarnos tus comentarios aquí.