✒️ABAP / La performance en ABAP Por Juan Romero
ABAP La performance en ABAP

La Performance en ABAP
- Se analizan las prácticas de programación que afectan el desempeño y rendimiento en ABAP, priorizando la performance.
- Los tres aspectos fundamentales son: tiempo de procesamiento de la lógica ABAP, de los accesos a la base de datos y del sistema SAP.
- El acceso a la base de datos suele ser el principal factor de impacto en recursos y tiempo, aunque con SAP HANA este impacto ha disminuido.
- Se recomienda utilizar la transacción SE30 para medir los tiempos de procesamiento y detectar cuellos de botella.
- Lo ideal es que el mayor porcentaje de tiempo se invierta en la lógica ABAP y el menor en los accesos a base de datos.
Buenas y malas prácticas de acceso a la base de datos
- Evitar el uso de SELECT * si no se requieren todos los campos de la tabla; especificar siempre los campos necesarios.
- No emplear SELECT ENDSELECT, salvo casos excepcionales; utilizar SELECT INTO TABLE por su mejor performance.
- Evitar SELECT sin cláusula WHERE, ya que recupera todos los registros y es costoso; especificar siempre condiciones precisas.
- Nunca ejecutar SELECT dentro de un LOOP, ya que incrementa exponencialmente la cantidad de accesos y reduce el rendimiento; preferir SELECT FOR ALL ENTRIES.
- No usar INSERT, UPDATE, MODIFY o DELETE dentro de un LOOP. Hacerlo en bloque fuera del ciclo, trabajando con tablas internas.
- Evitar múltiples SELECTs con FOR ALL ENTRIES si se pueden reemplazar por un JOIN, mucho más eficiente y directo.
Buenas y malas prácticas en la lógica ABAP
- Al leer registros de tablas internas usar siempre READ TABLE con BINARY SEARCH, asegurando que la tabla esté ordenada.
- Evitar el uso de LOOP dentro de otro LOOP sobre tablas internas debido al alto impacto en la performance; mejor usar condiciones y búsquedas optimizadas.
- Filtrar registros preferentemente desde el LOOP...WHERE, eliminando la necesidad de CHECK o IF-ENDIF dentro del loop.
- Siempre agregar la cláusula WHEN OTHERS en sentencias CASE para manejar casos no contemplados y evitar errores en producción.
- Al copiar o agregar el contenido de una tabla interna en otra, utilizar las sentencias APPEND LINES OF o INSERT LINES OF, mucho más performantes que el procesamiento registro por registro.
- Para eliminar duplicados en tablas internas, utilizar DELETE ADJACENT DUPLICATES y evitar procesamiento manual.
- La asignación directa de una tabla interna a otra para copiar todo el contenido es muy superior al agregado individual de registros.
- Cuando se requiera comparar dos tablas internas, usar directamente la comparación con corchetes, optimizando el tiempo frente a comparaciones manuales.
Reflexiones generales y conclusiones
- Muchas prácticas antiguas o "rápidas" en la escritura de código afectan gravemente el rendimiento cuando el volumen de datos crece.
- Aprovechar siempre las funcionalidades y sentencias más modernas y eficientes de ABAP.
- La performance debe ser considerada desde el inicio del desarrollo para evitar problemas en ambientes productivos con grandes volúmenes de datos.
- Es fundamental utilizar herramientas estándar como la transacción SE30 para monitorear, analizar y mejorar el rendimiento de los desarrollos.
Experiencias con herramientas de análisis de código
- En ABAP existen herramientas como el Inspector de Código (SCI) y el Chequeo Extendido (SLIN) que ayudan a evitar malas prácticas de programación y de acceso a base de datos.
- Se recomienda ejecutarlas tanto al crear como al modificar programas para asegurar la calidad y performance.
Comparativas de sentencias y rendimiento
- Se analizaron diferentes sentencias de acceso a datos y su impacto en performance usando la transacción SE30 y la funcionalidad de "tips and tricks".
- SELECT con condiciones en WHERE es mucho más eficiente que realizar un SELECT seguido de un CHECK.
- Especificar campos en SELECT (en vez de usar *) acelera la consulta (solo 862 microsegundos frente a 3153 usando *).
- SELECT INTO TABLE es muy superior en rendimiento comparado con select anidados y apendear registros uno a uno (34 frente a 287 microsegundos).
Operaciones con tablas internas
- La búsqueda binaria es considerablemente más performante que la lineal (1 frente a 28 microsegundos).
- Ordenar una tabla interna especificando el campo es más rápido que ordenarla sin especificar campos.
Comparación de IF vs. CASE y manipulación de caracteres
- No hay diferencias de rendimiento entre IF largos y CASE; se recomienda elegir por legibilidad.
- CONCATENATE es más eficiente con variables tipo carácter que con tipo string (0 vs. 1 microsegundo).
Sugerencias.
- Es clave enfocarse no solo en la funcionalidad del código ABAP, sino también en utilizar las sentencias que mejoren la performance.
- Las herramientas de SAP permiten comparar alternativas antes de definir la mejor para el desarrollo.
- Aplicar en el desarrollo diario la especificación de campos en SELECT y evitar SELECT *.
- Revisar y refactorizar programas que usen SELECT ENDSELECT, SELECT sin WHERE o accesos dentro de loops.
- Promover el uso de JOINs y optimizar la selección de datos desde tablas relacionadas.
- Capacitar al equipo en el uso de sentencias optimizadas para trabajar con tablas internas y comparaciones.
- Utilizar y documentar siempre la alternativa WHEN OTHERS en case...endcase.
- Utilizar SCI y SLIN en cada nueva creación o modificación de programas ABAP.
- Preferir SELECT con condiciones en WHERE y especificación de campos.
- Utilizar SELECT INTO TABLE para cargar datos de forma eficiente.
- Ante búsquedas en tablas internas, priorizar la búsqueda binaria, asegurando que están ordenadas adecuadamente.
- Declarar variables de tipo carácter al usar CONCATENATE para optimizar su uso.
 
 
 
Sobre el autor
Publicación académica de Juan Ignacio Romero, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Juan Ignacio Romero
Profesión: Ing. Sistemas Computacionales - Mexico - Legajo: LJ26F
✒️Autor de: 138 Publicaciones Académicas
🎓Egresado de los módulos:
Certificación Académica de Juan Romero






Disponibilidad Laboral: FullTime


















