Al perfilar su código ABAP, descubrió que el acceso a la base de datos es un importante contribuyente al tiempo de ejecución general. Ahora utilizará la herramienta Trace SQL para analizar los accesos a la base de datos de su programa con más detalle y mejorar aún más el rendimiento de su código.
Tarea 1: Copiar plantilla (opcional)
Copie la clase de modelo /LRN/CL_S4D401_ATS_PROFILING. Si ha finalizado el ejercicio anterior, puede omitir esta tarea y continuar editando su clase ZCL_##_SOLUTION.
Pasos
Copie la clase /LRN/CL_S4D401_ATS_PROFILING en una clase de su propio paquete (nombre sugerido: ZCL_##_SOLUTION, donde ## representa su número de grupo).
En el Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D401_ATS_PROFILING para abrir el menú contextual.
En el menú contextual, seleccione Duplicar....
Introduzca el nombre del paquete en el campo Paquete. En el campo Nombre, introduzca ZCL_##_SOLUTION, donde ## representa su número de grupo.
Seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Active la copia.
Pulse Ctrl + F3 para activar la clase.
Tarea 2: Realizar un trace SQL
Para seguir analizando los problemas de rendimiento, active el trace SQL y ejecute su clase ABAP ZCL_##_SOLUTION como una aplicación de consola.
Dentro de la misma instancia ABAP, solo un usuario puede activar el trace SQL a la vez. Para dar una oportunidad a otros usuarios, desactive el trace SQL una vez que haya terminado de ejecutar la aplicación de consola.
Pasos
Si no está abierta, abra su clase ABAP ZCL_##_SOLUTION en el editor.
Pulse Ctrl + Mayús + A e introduzca el nombre de su clase ABAP.
Seleccione OK.
Abra el diálogo Estado de trace SQL para su proyecto ABAP Cloud.
En el Explorador de proyectos de la izquierda, haga clic con el botón derecho en el proyecto para abrir el menú contextual.
Seleccione trace SQL ....
Verifique el estado de trace SQL actual. Si el trace está activado, cierre la ventana de diálogo y vuelva en unos minutos.
Seleccione OK para cerrar la ventana de diálogo.
Si el trace está desactivado actualmente, actívelo. A continuación, cierre la ventana de diálogo.
Seleccione Activar para activar el trace SQL.
Seleccione OK para cerrar la ventana de diálogo.
Ejecute su clase global ZCL_##_SOLUTION como aplicación de consola.
Pulse F9 para ejecutar la clase ABAP como aplicación de consola.
En cuanto la aplicación haya finalizado, desactive el trace SQL y abra el directorio de trace.
En cuanto desaparezca el indicador de progreso verde en la esquina inferior derecha, haga clic con el botón derecho en el proyecto en el Explorador de proyectos y seleccione SQL Trace ....
Seleccione Desactivar para desactivar el trace SQL.
Seleccione Ver directorio de traces para visualizar una lista de sus traces.
Tarea 3: Analizar el resultado del trace
Analice el resultado del trace SQL. Filtre los accesos a la base de datos que se originan a partir de su clase ABAP y averigüe a qué tablas de base de datos se ha accedido con qué frecuencia.
Pasos
En el cockpit de supervisión técnica, visualice los registros de trace del trace más reciente.
Consejo
Por defecto, la lista de traces se clasifica de forma descendente por la columna Cronomarcador.
Seleccione la entrada de la lista superior.
Seleccione Registros de trace.
Filtrar la lista de registros de trace. Visualice solo los registros que se originan a partir de su clase ABAP ZCL_##_SOLUTION.
Consejo
Le recomendamos que utilice la opción de filtro a la izquierda del botón Ir y no el filtro de visualización que puede fijar seleccionando la cabecera de columna Programa.
En la barra de herramientas de la tabla, a la izquierda del botón Ir, seleccione la opción Filtro (...).
Seleccione Programa de la lista desplegable en la parte superior de la ventana de diálogo.
Asegúrese de que la opción Me gusta esté seleccionada.
Sustituya la petición Introducir valor por el nombre de su clase ABAP (ZCL_##_SOLUTION).
Seleccione OK.
Seleccione Ir para actualizar las entradas de la tabla.
Clasificar la lista de registros de trace. Busque las sentencias SQL que han accedido a la mayoría de los registros.
Nota
Por defecto, la lista de registros de trace se clasifica por la columna Cronomarcador. Para modificar la clasificación, primero se debe eliminar la clasificación existente.
Seleccione los tres puntos horizontales a la derecha del botón Ir.
Seleccione Reinicializar clasificación.
En la barra de herramientas de la tabla, a la izquierda del botón Ir, seleccione la opción Clasificar (0).
Busque la columna Registros a los que se ha accedido [#]. Marque la casilla de la izquierda y seleccione el botón Clasificar de forma descendente para esta columna.
Seleccione OK para cerrar la ventana de diálogo.
Seleccione Ir.
Elimine la clasificación por la columna Registros a los que se ha accedido y clasifique la lista de forma descendente por la columna Duración.
Seleccione los tres puntos horizontales a la derecha del botón Ir.
Seleccione Reinicializar clasificación.
En la barra de herramientas de la tabla, a la izquierda del botón Ir, seleccione la opción Clasificar (0).
Busque la columna Duración [µs]. Marque la casilla de la izquierda y seleccione el botón Clasificar de forma descendente para esta columna.
Seleccione OK para cerrar la ventana de diálogo.
Seleccione Ir.
Para la sentencia de registro individual más cara, vaya a la sección Sentencia SQL.
Seleccione la fila con el valor 1 en la columna Registros a los que se ha accedido y el valor más grande en la columna Duración.
Seleccione Sentencia SQL en el panel de navegación de la parte superior.
Encontrará el nombre de tabla en la cláusula FROM.
Abra la sentencia SELECT en las herramientas de desarrollo ABAP.
Seleccione Mostrar fuente ABAP en ADT.
Tarea 4: Mejorar el código
Para mejorar aún más el rendimiento de su código, elimine el acceso repetido SELECT SINGLE a la tabla de base de datos /LRN/CONNECTION. Sabe que la tabla /LRN/CONNECTION contiene un número relativamente pequeño de registros. Por lo tanto, decide grabar en memoria intermedia todo el contenido de la tabla de base de datos en un atributo estático (nombre sugerido: connections_buffer). Rellene la memoria intermedia en el constructor estático (method class_constructor) y sustituya la sentencia SELECT SINGLE por un acceso de lectura a la memoria intermedia.
Consejo
El acceso SELECT SINGLE a la tabla de base de datos /LRN/CONNECTION se encuentra en el método constructor de la clase local lcl_passer_flight.
Pasos
Navegue a la definición del atributo connection_details y, desde allí, a la definición del tipo de estructura st_connection_details.
En la cláusula INTO de la sentencia SELECT SINGLE, sitúe el cursor en connection_details y pulse F3. Como alternativa, puede mantener pulsada la tecla Ctrl y hacer clic en connection_details.
En la sentencia DATA, sitúe el cursor en st_connection_details y pulse F3. Como alternativa, puede mantener pulsada la tecla Ctrl y hacer clic en st_connection_details.
Copie el tipo de estructura st_connection_details en un nuevo tipo de estructura privada (nombre sugerido: st_connections_buffer).
Seleccione toda la sentencia TYPES (incluida la fila END OF st_connection_details.) y pulse Ctrl + C.
Desplácese hacia abajo hasta la sección privada, coloque el cursor sobre la sentencia ENDCLASS y pulse Ctrl + V para insertar el código copiado.
En el código insertado, sustituya st_connection_details por st_connections_buffer.
Añada los campos clave carrier_id y connection_id de la tabla de base de datos /LRN/CONNECTION al principio de la lista de componentes de st_connections_buffer.
Ajuste el código de la siguiente manera:
123456789
TYPES:
BEGIN OF st_connections_buffer,
carrier_id TYPE /dmo/carrier_id,
connection_id TYPE /dmo/connection_id,
airport_from_id TYPE /dmo/airport_from_id,
airport_to_id TYPE /dmo/airport_to_id,
departure_time TYPE /dmo/flight_departure_time,
arrival_time TYPE /dmo/flight_arrival_time,
END OF st_connections_buffer.
Declare un atributo estático privado denominado connections_buffer como una tabla interna con st_connections_buffer como tipo de fila.
Al final de la definición de clase, añada el siguiente código:
1
CLASS-DATA connections_buffer TYPE TABLE OF st_connections_buffer.
Utilice una corrección rápida para generar un constructor estático (constructor de clase) para la clase lcl_passer_flight.
Desplácese hacia arriba hasta la sentencia CLASS lcl_passenger_flight DEFINITION.
Sitúe el cursor en lcl_passenger_flight y pulse Ctrl + 1 para visualizar una lista de correcciones rápidas disponibles.
En la lista, seleccione Generar constructor de clase.
Edite la implementación del método class_constructor. Implemente una sentencia SELECT que lea todos los registros de la tabla de base de datos /LRN/CONNECTION en el atributo connections_buffer.
Ajuste el código de la siguiente manera:
1234567
METHOD class_constructor.
SELECT
FROM /lrn/connection
FIELDS carrier_id, connection_id,
airport_from_id, airport_to_id, departure_time, arrival_time
INTO TABLE @connections_buffer.
ENDMETHOD.
En la implementación del constructor de método, sustituya la sentencia SELECT SINGLE por un acceso de lectura a connections_buffer.
Nota
Tenga en cuenta que el atributo connection_details tiene menos componentes que el tipo de fila del atributo connections_buffer.
Seleccione toda la sentencia SELECT SINGLE y pulse Ctrl + < para añadir un signo de comentario delante de cada fila.
Después de la sentencia SELECT SINGLE comentada, añada el siguiente código:
12345678910111213
connection_details = CORRESPONDING #(
connections_buffer[
carrier_id = i_carrier_id
connection_id = i_connection_id ]
).
Tarea 5: Volver a verificar el código
Active y pruebe su clase global. Ejecute la clase como aplicación de consola. Repita la creación de perfiles para medir la mejora del rendimiento.
Pasos
Active su clase global y ejecútela como aplicación de consola.
Pulse Ctrl + F3 para activar la clase.
Pulse F9 para ejecutar la clase como aplicación de consola.
Inicie la medición de tiempo de ejecución con el ABAP Profiler.
Haga clic con el botón derecho en el editor y seleccione Perfil Como→aplicación ABAP (consola).
En la ventana de diálogo Parámetros de trace, seleccione Finalizar sin modificar ninguna de las opciones.
Cambie a la perspectiva Generador de perfiles y analice el resumen de trace.
Seleccione Ventana→Perspectiva→Abrir perspectiva→Otros... Seleccione ABAP Profiling y seleccione Abrir.
En la vista Traces ABAP, seleccione Actualizar en el menú contextual de su proyecto ABAP. Como alternativa, puede colocar el cursor en cualquier lugar de la vista Traces ABAP y pulsar F5 para volver a cargar la lista de resultados de trace.
Haga doble clic en el trace más reciente (esta es la entrada superior de su proyecto).
El tiempo de ejecución total y la distribución entre ABAP y la base de datos se visualizan en la sección inferior del resumen.