Close

septiembre 18, 2012

Optimizar y medir el uso de memoria en ABAP

Para que un programa sea rápido no solo se necesita de una buena infraestructura (Ancho de banda, RAM, CPU, etc), ademas se debe programar correctamente haciendo uso de buenas practicas al escribir el código. Algunas de las buenas prácticas a las que debemos de poner atención son las relacionadas al uso de memoria. Veamos ahora cuales son y cómo podemos medir los resultados.

Buenas practicas.

  1. No declarar variables que no vamos a utilizar: Al declarar variables estamos reservado memoria aun que no lleguemos a hacer uso de ella.
  2. Declarar las variables del tamaño apropiado: Si declaramos una variable por ejemplo de 100 caracteres y solo llegamos a usar hasta 50 caracteres estamos desperdiciando el 50% de la memoria reservada para esa variable. Lo mismo sucede para variables numéricas como usar un tipo int4 para almacenar un mes (valores del 1 al 12)
  3. Evitar el uso de variables globales: Las variables globales se mantienen en memoria mientras la transacción no se cierre. Si dividimos el programa en pequeñas rutinas (usando PERFORM) en donde realicemos un calculo utilizando variables locales, SAP libera la memoria al terminar la rutina.
  4. Evitar utilizar Select * from…: Es fácil hacer un “select *” en lugar de digitar unicamente los campos que deseamos leer, pero esto consume más memoria de la necesaria. Esto aplica también al declarar la tabla interna en la que vamos a insertar los datos del select, debemos hacerlo no con todos los campos de la tabla, sino solo los que vamos a utilizar.
  5. Evitar presentar reportes con campos que no se necesiten: Al hacer un reporte (ALV) no incluir campos que no sean solicitados por el usuario final y según el análisis que se haga del requerimiento. Si el reporte tiene muchas filas podemos ahorrar mucha memoria al eliminar las columnas no solicitadas.

Medición del consumo de memoria.

SAP nos provee de buenas herramientas para la medición del consumo de memoria, ahora veremos algunas.

Transacción sm04

Nos muestra la lista de usuarios en el servidor, con la memoria en MB que están utilizando, hay que tener en cuenta que nos muestra el total de memoria utilizada, así que para una mejor medición, el usuario que ejecuta el reporte o programa a monitorerar no debe de tener otros modos abiertos

Transaccion sm04

Análisis de memoria (Debug de ABAP)

Primero ejecutamos el programa en modo debug, y hacemos clic sobre Reemplace Herramienta, y elegimos Análisis memoria.

Pasos para Mostrar análisis de memoria

Ahora hacemos clic sobre el botón Objetos memoria.

Boton Objetos memoria

Ahora veremos una pantalla con el detalle de la memoria utilizada, si queremos saber la cantidad en MB, dividimos la cantidad entre 1024 dos veces.

Memoria usada