✒️ABAP / La performance en ABAP Por Geovanny Martínez Campoverde
ABAP La performance en ABAP

La performance en ABAP
1 La performance en ABAP
Se refiere al rendimiento y la eficiencia con la que se ejecuta el código. Es un aspecto fundamental, ya que un mal desempeño puede afectar no solo la ejecución de un programa, sino el funcionamiento general del sistema SAP.
Existen tres aspectos clave que determinan la performance de un programa ABAP:
-
Tiempo de procesamiento de la lógica ABAP:
Se refiere al tiempo que toma ejecutar las instrucciones y procesos internos del programa. -
Tiempo de acceso a la base de datos:
Es el tiempo necesario para consultar, insertar, modificar o eliminar datos en las tablas del sistema.
Este es el factor que más influye en el rendimiento, por lo que debe ser optimizado en prioridad. -
Tiempo de procesamiento general del sistema SAP:
Abarca el rendimiento del sistema en su conjunto, incluyendo el impacto de otros procesos o cargas que se estén ejecutando en paralelo.
SAP proporciona la transacción estándar SE30, conocida como Análisis de tiempo de ejecución, que permite evaluar:
-
Cómo se distribuye el tiempo de procesamiento entre la lógica ABAP, los accesos a la base de datos y el sistema.
-
Qué partes del programa consumen más recursos.
Esta herramienta es fundamental para detectar cuellos de botella y optimizar el rendimiento de los programas.
2 Las buenas y las malas prácticas en el acceso a la base de datos
El acceso a las bases de datos es uno de los factores que más impacto tiene en la performance de un programa ABAP. Si las consultas no se diseñan de forma eficiente, se pueden generar problemas graves de rendimiento, especialmente en sistemas productivos con millones de registros.
A continuación, se detallan las principales prácticas recomendadas y las que se deben evitar:Uso de SELECT *:
Recuperar todos los campos de una tabla, incluso si no se van a utilizar, genera un mayor consumo de recursos.
A continuación, se detallan las principales prácticas recomendadas y las que se deben evitar:
Uso de SELECT *:
Recuperar todos los campos de una tabla, incluso si no se van a utilizar, genera un mayor consumo de recursos.
Recomendación: Especificar solo los campos necesarios.
Uso de SELECT ... ENDSELECT:
Esta estructura es ineficiente en comparación con SELECT INTO TABLE, ya que procesa los datos registro por registro.
Recomendación: Utilizar SELECT INTO TABLE para cargar los registros directamente en una tabla interna.
SELECT sin cláusula WHERE:
Recuperar todos los registros de una tabla sin filtrar genera consultas pesadas y lentas, además de ser indicio de errores de programación.
Recomendación: Siempre utilizar condiciones WHERE, preferiblemente sobre campos clave.
Ejecutar SELECT dentro de un LOOP-ENDLOOP:
Si dentro de un bucle se ejecutan múltiples consultas, el rendimiento cae drásticamente, sobre todo si el bucle recorre miles de registros.
Recomendación: Utilizar SELECT FOR ALL ENTRIES para recuperar previamente los registros necesarios y trabajar en memoria.
Ejecución de INSERT, UPDATE, MODIFY o DELETE dentro de un LOOP-ENDLOOP:
Genera múltiples accesos a la base de datos, afectando el rendimiento.
Recomendación: Procesar los datos en tablas internas y realizar las modificaciones de forma masiva fuera del bucle.
SELECT más SELECT vs JOIN:
Hacer varias consultas separadas en vez de utilizar JOIN entre tablas relacionadas es menos eficiente.
Recomendación: Utilizar JOIN para obtener los datos de varias tablas en una sola consulta.
3 Las buenas y malas prácticas en la lógica de procesamiento ABAP
La forma en que se estructura la lógica de procesamiento en los programas ABAP influye de manera significativa en el rendimiento y la eficiencia del sistema. Existen ciertas técnicas que permiten optimizar los procesos en memoria, reducir los tiempos de ejecución y mejorar la calidad del código.
Uso de READ TABLE con BINARY SEARCH
Mala práctica: Leer tablas internas sin optimizar la búsqueda provoca recorridos secuenciales, lo que es ineficiente en tablas grandes.
Buena práctica: Ordenar la tabla interna por los campos de búsqueda y utilizar BINARY SEARCH para reducir los tiempos de búsqueda de forma considerable.
Evitar LOOP-ENDLOOP dentro de otro LOOP-ENDLOOP
Mala práctica: Ejecutar ciclos anidados multiplica la cantidad de operaciones, generando millones de iteraciones innecesarias.
Buena práctica: Optimizar el primer bucle con condiciones WHERE y reemplazar el segundo ciclo por un READ TABLE con BINARY SEARCH.
Condiciones dentro del LOOP — CHECK vs WHERE
Mala práctica: Utilizar sentencias CHECK o IF-ENDIF dentro del bucle, ya que primero se recorren todos los registros y luego se filtran.
Buena práctica: Filtrar directamente los registros a recorrer usando la cláusula WHERE, lo que reduce el tiempo de ejecución.
Uso de CASE-ENDCASE sin WHEN OTHERS
Mala práctica: Olvidar la opción WHEN OTHERS puede generar resultados inesperados o errores en tiempo de ejecución si se recibe un valor no contemplado.
Buena práctica: Siempre incluir WHEN OTHERS como medida de seguridad para manejar casos no previstos.
Copia de tablas internas — APPEND LINES OF vs ciclo manual
Mala práctica: Recorrer una tabla interna y copiar los registros uno por uno a otra tabla interna.
Buena práctica: Utilizar APPEND LINES OF para copiar los registros de forma masiva y eficiente.
Inserción de registros — INSERT LINES OF vs inserción manual
Mala práctica: Insertar registros uno a uno en una tabla interna dentro de un bucle.
Buena práctica: Utilizar INSERT LINES OF para insertar múltiples registros en una sola instrucción.
Eliminación de duplicados en tablas internas
Mala práctica: Comparar manualmente los registros y eliminar duplicados recorriendo la tabla.
Buena práctica: Ordenar la tabla interna y utilizar DELETE ADJACENT DUPLICATES para eliminar duplicados de forma rápida.
Copia de contenido entre tablas internas
Mala práctica: Borrar el contenido de una tabla y copiar los registros uno a uno desde otra tabla interna.
Buena práctica: Usar directamente la asignación tabla_interna_1[] = tabla_interna_2[] para copiar el contenido de forma eficiente.
Comparación de tablas internas
Mala práctica: Comparar manualmente los registros entre dos tablas internas.
Buena práctica: Utilizar la instrucción IF tabla1[] = tabla2[] que permite comparar tablas internas de igual tipo en una sola línea de código.
 
 
 
Sobre el autor
Publicación académica de Geovanny Martínez Campoverde, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Geovanny Martínez Campoverde
Profesión: Ingeniero en Sistemas - Ecuador - Legajo: JJ46N
✒️Autor de: 144 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor SAP HCM Nivel Avanzado
- Carrera Consultor SAP HCM Nivel Inicial
Presentación:
Consultor en gestión de datos y desarrrollo de erp, enfocado en optimizar procesos. mi objetivo, especializarme en sap hcm, aplicando las mejores prácticas para impulsar el desarrollo organizacional
Certificación Académica de Geovanny Martínez






Disponibilidad Laboral: FullTime


















