Cómo analizar el rendimiento de las consultas de las vistas CDS de ABAP. SAP

Propósito

Como ya sabrá, ABAP CDS View es uno de los objetos de desarrollo importantes en SAP S/4HANA, que soporta múltiples propósitos, incluyendo aplicaciones transaccionales o analíticas. ABAP CDS View aprovecha la potencia de la base de datos subyacente de HANA para aumentar el rendimiento. Sin embargo, a veces el rendimiento no es lo suficientemente bueno y necesita algunos ajustes finos. Ya hay algunos blogs y documentos muy buenos por ahí.

Salvaguardar el rendimiento de las vistas CDS de ABAP

En este blog, me gustaría primero volver al punto de partida común del análisis de rendimiento para las consultas basadas en las vistas CDS de ABAP. Podría ser útil resumir el enfoque general para los desarrolladores de vistas CDS antes de introducir reglas y consejos relativamente abstractos.

Tiempo de ejecución de la vista CDS ABAP

Aunque la vista CDS ABAP se desarrolla y almacena en el repositorio ABAP, la ejecución en tiempo de ejecución será empujada a la base de datos HANA. A continuación se muestra el diagrama que representa la arquitectura técnica. Por lo tanto, tenemos que centrarnos en el análisis de la ejecución dentro de la base de datos. Existen diferentes herramientas para analizar el rendimiento de las sentencias SQL de HANA, por ejemplo, HANA performance trace, python trace, etc. Personalmente, creo que la herramienta más útil es el plan visualizado de HANA.

Reproducir los problemas y el análisis inicial

Diferentes aplicaciones pueden desencadenar consultas o llamadas a CDS Views ABAP, por ejemplo, programas ABAP, aplicación SAP Fiori, herramientas de reporting como SAP Analytics Cloud, aplicación SAP Analytics. Eventualmente siempre la pila ABAP desencadena la ejecución de las vistas CDS ABAP. Por lo tanto, cuando se produce un problema de rendimiento para casos específicos, la primera herramienta que utilizaría es el Código de Transacción «ST12» (Trace), que recoge tanto las trazas ABAP como las trazas SQL al mismo tiempo. Una de las funciones de ST12 (la traza ABAP), proporciona un análisis inicial sobre cuánto tiempo se gasta en la pila ABAP y cuánto tiempo está en la capa HANA DB.

En algunos casos, sin este análisis inicial, la gente ya empezó a culpar a las vistas CDS o a la base de datos HANA, ya que son la nueva tecnología y los objetos introducidos. Sin embargo, la traza ABAP a veces indica que el cuello de botella puede residir también en ABAP. Por supuesto, un requisito previo para este enfoque es que necesitamos conocer los pasos exactos para reproducir los problemas de rendimiento de las aplicaciones frontales.

En la traza ABAP, podemos ordenar las llamadas según el tiempo neto empleado respectivamente. Si vemos que una parte importante del tiempo se gasta en la BD, entonces podemos navegar a las trazas SQL haciendo clic en el enlace «DB->» detrás de la declaración. El patrón típico para la llamada basada en la vista CDS es «FETCH statement «.

Recoger la sentencia SQL

Después de hacer clic en el enlace, nos lleva al resumen SQL para las llamadas a la BD relacionadas. Aquí ya se pueden ver algunas estadísticas importantes, por ejemplo, el total de registros devueltos. En algunos casos analíticos, se devuelve una gran cantidad de datos. Esto podría requerir reconsiderar el diseño de la aplicación y si falta un filtro razonable en el frontend. En otros casos, si vemos un elevado número de ejecuciones para la misma sentencia SQL, debemos comprobar si un bucle contiene las llamadas a las vistas en el programa ABAP y si se puede reducir el número de bucles para evitar demasiadas idas y vueltas a la base de datos.

Haga doble clic en la entrada de cada llamada. Verá la sentencia SQL completa con los marcadores de posición para las variables al principio. Cópiela para utilizarla más tarde.

Haga clic en la entrada de la ejecución más lenta y se mostrará la declaración con los valores. La ejecución más lenta con los valores específicos puede ser la más representativa para revelar el problema. Copie también esta sentencia y recoja los valores de la misma.

A continuación se explica el concepto de «Literales» (valores específicos) y «Variables de enlace» (marcador de posición «?» utilizado para las variables).

Con el fin de reducir la sobrecarga de análisis, las variables de enlace se utilizan en muchos entornos como SAP ABAP:

VariantExample SQL command 
Literals SELECT * FROM DBSTATC WHERE OBJOW = ‘SAPR3’ AND DBOBJ = ‘AFPO’
Bind variables SELECT * FROM DBSTATC WHERE OBJOW = ? AND DBOBJ = ? 

De este modo, la sentencia con la misma estructura pero con valores diferentes no necesita ser analizada y compilada de nuevo y sólo reutiliza el plan existente si lo hay.

La ejecución de una sentencia SQL con literales explícitos o con variables bind puede suponer una diferencia significativa en términos de plan de ejecución, rendimiento y consumo de recursos. Por lo tanto, se recomienda analizar una sentencia SQL costosa que utilice variables bind de la misma forma que lo hace la pila ABAP, es decir, también con variables bind. Por eso, primero copiamos la sentencia con marcadores de posición.

Generar el plan visualizado de HANA

Para generar el plan, pegamos toda la sentencia con los marcadores de posición mencionados en el último paso en el Editor SQL de HANA que está conectado a la base de datos subyacente del sistema SAP S/4HANA. Por favor, no olvide mantener manualmente las variables de sesión que impactan en la generación del plan correcto para las consultas también. Estas variables se utilizan como el contexto de sesión de las llamadas ABAP.

Por ejemplo,

SET SCHEMA SAPABAP1;
SET ‘CDS_CLIENT’      = ‘010’;
SET ‘APPLICATIONUSER’ = ‘SAPSUPPORT’;
SET ‘SAP_SYSTEM_DATE’ = ‘20200111’;

También puede cambiar los valores para su propósito de prueba.

Prepare los valores específicos para la variable en una línea delimitada por comas y cópielos (ctrl C).

A continuación, haga clic con el botón derecho del ratón en el extracto y elija ejecutar el plan visualizado.

Por favor, no excluya la sugerencia y la restricción de rango como la que se muestra a continuación de la sentencia que se va a rastrear porque también pueden suponer una diferencia en el plan de ejecución.

WITH HINT(NO_JOIN_THRU_AGGR,
RESULT_LAG (‘hana_long’)) WITH RANGE_RESTRICTION(‘CURRENT’)

Después de ejecutar la sentencia con los marcadores de posición, una ventana emergente pide los valores de las variables. A continuación, haga clic con el botón derecho del ratón en la sentencia para añadir los valores de los parámetros.

Pegue los valores preparados. Presione OK.

A continuación, los valores se rellenan en los espacios en blanco de su secuencia mantenida.

Haga clic en el botón de ejecución en la esquina superior derecha. Entonces se genera el plan visualizado.

Nuevas formas de recoger el Planviz
Si su sistema cumple con el siguiente prerrequisito,

◉ 7.52 SP3 (and higher)
◉ 7.53 SP1 (and higher)
◉ 7.54 All SPs

en la traza ST05 (o desde la traza ST12) se puede recoger directamente el viz del plan HANA.

Aunque esta manera es más conveniente para obtener el plan visualizado de HANA, pero creo que el enfoque manual original todavía puede ayudar a probar en el HANA Studio directamente. Por ejemplo, puedes cambiar las variables de sesión, los valores de los parámetros, la propia sentencia SQL o añadir sugerencias para el propósito de la prueba.

Generando el plan HANA Visualized con DBACockpit.

En el caso de que no tengamos acceso a la conexión con la BD dentro de HANA Studio, otra alternativa es utilizar DBACockpit para generar el planviz y probar allí.

Transacción: DBACOCKPIT.

El editor de SQL se encuentra en la carpeta «Diagnostics». Copie y pegue la sentencia SQL con las variables. Pulse el botón «Execution Trace».

Rellena los valores de las variables y ejecuta.

A continuación, se ejecutará el planviz y un aviso le pedirá que guarde el archivo.

A continuación, el planviz guardado puede abrirse desde el estudio HANA.

Con este enfoque, es posible modificar las sentencias SQL pero no las variables de sesión. Las variables de sesión se toman de la sesión de usuario ABAP que ejecuta la sentencia SQL en DBACockpit.

Info desde: http://sapabapcentral.blogspot.com/.

Más info en: https://setevalapinsap.com

Saludos.

Etiquetas:, , ,