✒️ABAP La performance en ABAP
ABAP La performance en ABAP
Lección 8
Video - Performance en ABAP
PRIMERA PARTE (VIDEO 1)
En ABAP existe lo que en programación se denomina como buenas y malas prácticas ya sea porque afectan a la performance de los programas o porque afectan a otros factores determinantes como son la reutilización del código. En esta ocasión nos vamos a concentrar en el performance de los programas. Cuando hablamos de performance nos estamos refiriendo al análisis del desempeño y rendimiento del programa. Para ello vamos a trabajar con una transacción estándar de SAP que es sumamente útil para el análisis de la performance (Transacción SM30). Una vez que ingresamos a la transacción presionamos el botón Tips & Tricks. Aquí vamos a ir analizando las diferentes prácticas de programación ABAP con las que trabajamos a lo largo del módulo de estudios, de modo de poder determinar cuales son buenas y debemos seguir utilizando y cuales no son recomendables y debemos dejar de utilizar. Empecemos abriendo la carpeta SQL Interface. Allí cliqueamos Aggregates Select. Aquí vemos dos códigos ABAPS que realizan lo mismo de dos formas diferentes, el objetivo es obtener el máximo valor. El de la izquierda utiliza la sentencia SELECT ENDSELECT totalmente desaconsejada desde el punto de vista de la performance, y el de la derecha utiliza la sentencia SELECT MAX. Para evaluar la performance de ambos códigos presionamos el botón "Medir tiempo de ejecución". Y verificamos lo que mencionamos anteriormente, mientras que con el código de SELECT ENDSELECT el sistema tarda 2739 Microsegundos, utilizando el SELECT MAX el sistema solo tarda 177 Microsegundos. Por lo tanto, cuando tengamos que buscar el máximo valor en una tabla siempre utilicemos la opción de la derecha, es decir el SELECT MAX. Ahora cliqueamos Selección con lista de selección. Aquí vemos dos códigos ABAP. Si bien ambos utilizan la sentencia SELECT ENDSELECT la cual está totalmente desaconsejada, el de la izquierda realiza un SELECT *, mientras que el de la izquierda especifica los campos a seleccionar. Para evaluar su performance seleccionamos el botón "Medir tiempo de ejecución". Verificamos que especificar los campos a seleccionar es mucho más eficiente que realizar un SELECT * donde seleccionamos todos los campos, que en muchos casos puede ser innecesario. Ahora abrimos la carpeta "Operaciones de Array (Tablas internas). Aquí seleccionamos SELECT INTO TABLE. Vemos dos códigos ABAP. En el de la izquierda se realiza un SELECT ENDSELECT totalmente desaconsejado y por cada vuelta un APPEND a una tabla interna. En el de la derecha ejecutamos la sentencia SELECT INTO TABLE la cual insertará directamente los registros seleccionados en la tabla interna. Veamos la performance de ambas. Comprobamos que la utilización del SELECT INTO TABLE es altamente conveniente ya que es prácticamente 7 veces más eficiente desde el punto de vista de la performance. Ahora cliqueamos ARRAY INSERT VS INSERT de un solo registro. Vemos dos códigos, a la izquierda recorremos la tabla interna TAB y por cada registro realizamos un INSERT. A la derecha evitamos recorrer la tabla interna ejecutando la sentencia INSERT FROM TABLE. Veamos la performance de ambas opciones. Si bien el resultado arrojado para ambas es 0 Microsegundos la opción de la derecha es ampliamente recomendable. Ahora seleccionamos ARRAY SELECT VS SELECT ENDSELECT. Aquí vemos dos opciones, a la izquierda realizamos un SELECT INTO TABLE y luego recorremos la tabla interna con un LOOP. A la derecha ejecutamos el famoso SELECT ENDSELECT tan desaconsejado por su mala performance. Veamos la performance de ambas sentencias. Comprobamos que no es conveniente la utilización del SELECT ENDSELECT, siempre es preferible el SELECT INTO TABLE. Ahora abrimos la carpeta de tablas internas. Allí cliqueamos "Usando estructuras explicitas", y vemos dos códigos en el de la izquierda se realiza una asignación y luego un APPEND, en el de la derecha hacemos los dos pasos en uno solo. Veamos la performance de ambos. Si bien el resultado es el mismo es ampliamente recomendable evitar realizar asignaciones innecesarias. Ahora seleccionamos Búsqueda Lineal VS Búsqueda Binaria.
SEGUNDA PARTE (VIDEO 2)
Vemos por un lado la búsqueda lineal que lee cada registro de la tabla interna en forma secuencial hasta encontrar el que cumple con la condición. Y por otro lado la busqueda binaria que divide en 2 el espectro de búsqueda hasta encontrar el registro buscado. Veamos la performance de ambas. El resultado indica que la búsqueda binaria es 20 veces más eficiente que la busqueda lineal. Seleccionamos ahora acceso por clave a múltiples registros. Allí se presentan dos alternativas a la izquierda vemos un loop y dentro del mismo una condición. A la derecha vemos un loop que tiene incorporado la condición, utilizando la cláusula WHERE. Veamos la performance de ambas. El resultado indica que es ampliamente recomendable incorporar dentro de los loops las condiciones de búsqueda, de modo de restringir lo más posible la cantidad de interacciones a realizar. Ahora abrimos la carpeta operaciones de ARRAY y seleccionamos la opción APPENDEO de Tablas. Vemos dos códigos. En el de la izquierda se loopea una tabla interna y se appendea otra. En el de la derecha se realizan ambos pasos en uno solo utilizando la sentencia APPEND LINES OF, veamos la performance de ambas. Comprobamos que es ampliamente recomendable la utilización de la sentencia APPEND LINES OF. Ahora seleccionamos la opción Inserción de tablas. En el código de la izquierda se recorre una tabla interna y se inserta cada registro de esta en otra tabla interna en cambio a la derecha se realizan ambos pasos en uno solo utilizando la sentencia INSERT LINES OF. Veamos la performance de ambas opciones. Comprobamos que es sumamente recomendable utilizar la sentencia INSERT LINES OF. Ahora seleccionamos Borrado de duplicados. Aquí se presentan dos códigos la principal diferencia entre ambos es que en el de la izquierda se emplea una combinación de sentencias para borrar los duplicados en la tabla interna, en cambio en el de la derecha solamente se utiliza la sentencia DELETE ADJACENT DUPLICATES. Veamos la performance de ambos. Comprobamos que es ampliamente recomendable utilizar la sentencia DELETE ADJACENT DUPLICATES para borrar registros duplicados de una tabla interna. Seleccionamos ahora copiar tablas internas. Aquí se presentan dos opciones. En la izquierda se loopea una tabla interna y se APPENDEA cada registro en otra tabla interna. En cambio en la derecha, se realiza una asignación directa del contenido de la tabla 1 a la tabla 2. Para ello ambas tablas deben ser iguales. Veamos la performance de ambas. Sin duda la asignación directa del contenido de una tabla interna a otra del mismo tipo es ampliamente recomendable. Seleccionemos ahora comparación de tablas internas. En el código de la izquierda se recorren y leen las tablas internas para establecer si son iguales o no. En cambio en la derecha se emplea la comparación directa. Veamos la performance de ambas. Comprobamos que la comparación directa es totalmente superior en cuestiones de performance. Seleccionamos ahora ordenamiento de tablas internas. Aquí vamos a comparar la diferencia que existe entre ordenar una tabla interna sin especificar el campo y especificando del campo de ordenamiento. Veamos la performance de ambas sentencias. Verificamos que es sumamente recomendable especificar el campo de ordenamiento de una tabla interna al ejecutar la sentencia SORT. Ahora abrimos la carpeta TIPOS y seleccionamos parámetros con tipos vs parámetros sin tipos. En la declaración de la subrutina UP1 de la izquierda no se especifícan los tipos de los parámetros, en cambio en la declaración de la subrutina UP2 de la derecha si se especifican los tipos de los parámetros. Veamos la performance de ambas. Comprobamos que siempre es conveniente especificar los tipos en las declaraciones de subrutinas. Ahora abrimos la carpeta IF, CASE y seleccionamos IF VS CASE. Vamos a verificar si es más performance especificar condiciones con IF o mediante CASE. Comprobamos que es levemente más performance utilizar la sentencia CASE para condiciones con muchas opciones. Ahora abrimos la carpeta conversión de campos y seleccionamos tipos mixtos. Aquí se presentan dos códigos. A la izquierda vamos a multiplicar dos variables de distinto tipo cuyo resultado almacenaremos en una variable de un tipo distinto a las otras dos. En cambio en la derecha utilizamos variables del mismo tipo. Veamos que es más eficiente en cuestión de performance. Resulta más conveniente trabajar con variables del mismo tipo al realizar operaciones aritméticas. Ahora bien, algo importante de esta transacción es que nos permite grabar en archivo los códigos DT que ejecutamos. También nos permite textear el código que nosotros mismos desarrollemos simplemente escribiendo dicho código en la pantalla y presionando el botón de medición de tiempo. Por último la transacción nos permite evaluar cómo se distribuye el tiempo de procesamiento de un programa ABAP. Para ello basta con ingresar el nombre del programa, ejecutarlo y presionar el botón evaluar, para finalmente ver los resultados en pantalla.
AUDIO TIPS: Los tiempos de procesamiento de un programa ABAP se dividen entre ABAP, la base de datos y el sistema. De estos 3 ítems el que debemos tener en cuenta principalmente cuando evaluamos la performance es el tiempo de la base de datos, ya que este es el que más recursos consume y por consiguiente es el que más tiempo requiere. Cuanto más alto sea el porcentaje de procesamiento de la base de datos en comparación a los otros dos porcentajes, los tiempos de duración del programa se irán por las nubes. La situación ideal es que el porcentaje de procesamiento ABAP sea lo más alto posible y el porcentaje de procesamiento de la base de datos sea lo más bajo posible. Para lograr esta situación deseada utilizaremos todas las técnicas de optimización de la performance que vimos en esta lección.
 
 
 
Sobre el autor
Publicación académica de Freddy Enrique Sierra Yepez, en su ámbito de estudios para la Carrera Consultor ABAP.
Freddy Enrique Sierra Yepez
Profesión: Ingeniero de Sistemas - Colombia - Legajo: PA44Z
✒️Autor de: 68 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Freddy Sierra