Solución de problemas de rendimiento en configuraciones de ER
Este artículo explica cómo encontrar y solucionar problemas de rendimiento en configuraciones de informes electrónicos (ER).
Normalmente, la investigación del rendimiento consta de varios pasos.
- Recopilar datos.
- Analizar los datos recopilados.
- Según los resultados del análisis, utilizar configuraciones ER para hacer cambios o decidir recopilar más datos.
Solución de problemas
Analizar el tiempo de ejecución
El tiempo de ejecución puede depender de factores impredecibles, como otras tareas que se ejecutan en el mismo entorno y el almacenamiento en caché que utiliza datos cuando se llama por primera vez. Por lo tanto, debe repetir la ejecución y la medición varias veces.
A veces, los problemas de rendimiento no se deben a una configuración de formato ER que se utiliza para generar informes. En cambio, son causados por el código X ++ que se usa para abrir esa configuración de formato ER.
Tanto en el Centro de Acción como en el registro de eventos, mire el tiempo de ejecución del informe.
Compare el tiempo de ejecución del informe con el tiempo total de ejecución en el escenario.
Si el tiempo de ejecución del informe es mucho menor que el tiempo total de ejecución, considere la cantidad de datos que procesa el informe:
- Si el informe procesa una pequeña cantidad de datos, el problema puede implicar el tiempo de carga de la configuración.
- Si el informe procesa una gran cantidad de datos, el problema puede implicar el preprocesamiento de X++. Usar el Analizador de seguimiento para analizar este caso.
Para otros casos, consulte las siguientes secciones.
Ejecute varias pruebas que involucren diferentes cantidades de datos para determinar cómo el tiempo de ejecución depende de la cantidad de datos.
Analizar seguimientos de Trace Parser
Prepare un pequeño ejemplo o recopile varios seguimientos durante partes aleatorias de la generación del informe.
Entonces, en Analizador de seguimiento, realice un análisis estándar de abajo hacia arriba y responda las siguientes preguntas:
- ¿Cuáles son los mejores métodos en términos de consumo de tiempo?
- ¿Qué parte del tiempo total utilizan esos métodos?
Responda las mismas preguntas para consultas.
Si ve que los métodos tienen el prefijo "ER", continúe con la siguiente sección.
Si ve que los métodos o consultas se originaron en el conjunto de aplicaciones, considere optimizaciones genéricas (por ejemplo, cree índices).
Analiza el número de llamadas. Si el número es significativamente mayor de lo esperado, considere almacenar en caché los nodos correspondientes de la configuración.
Analizar llamadas a la base de datos
Prepare un ejemplo que tenga una pequeña cantidad de datos, para que pueda recopilar un Seguimiento de ER.
Luego, abra el seguimiento en el diseñador de asignación del modelo ER y mire en la parte inferior de la página. Responda a las siguientes preguntas:
¿Existe alguna duplicación de consultas? Si existe, considere una de las siguientes correcciones:
- Usar almacenamiento en caché si cree que hay varias llamadas dentro de un registro primario.
- Utilice un campo calculado parametrizado almacenado en caché si cree que hay llamadas al mismo registro dentro de diferentes registros.
- Usar un origen de datos JOIN si tiene que leer un número considerable de registros diferentes de una base de datos.
¿El número de consultas y registros obtenidos corresponde a la cantidad total de datos? Por ejemplo, si un documento tiene 10 líneas, ¿las estadísticas muestran que el informe extrae 10 líneas o 1000 líneas? Si tiene una cantidad considerable de registros recuperados, considere una de las siguientes correcciones:
- Utilice la función FILTRO en lugar de la función DONDE para procesar datos del lado de Microsoft SQL Server.
- Utilice el almacenamiento en caché para evitar obtener los mismos datos.
- Utilizar funciones de datos recopilados para evitar obtener los mismos datos para el resumen.
Analizar seguimientos de PerfView
PerfView es una herramienta para desarrolladores experimentados. Para obtener información más detallada sobre los siguientes pasos, consulte Conceptos básicos sobre la investigación del tiempo del reloj de pared.
Recoge un seguimiento usando el tiempo de subproceso.
Incluya solo pilas que usen runUnattended, para filtrar solo el subproceso que tiene ejecución de configuración. (Agregar runUnattended al cuadro de entrada IncPats.)
Plegar toda la CPU, la red y el tiempo bloqueado.
Seleccione ER>Otro preajuste.
Mire los nombres:
Probablemente verá el código de la plataforma que consume más tiempo.
Puede tocar dos veces (o hacer doble clic) y subir a través de callees.
Si encuentra clases que tienen el prefijo "ERExpression" y si son funciones relacionadas con fórmulas, puede adivinar el nombre de la función según el nombre de la clase y puede consultar el repositorio de ER para ver los atributos.
Correcciones
Si ve que las consultas consumen la mayor parte del tiempo de CPU, intente reducir la cantidad de consultas:
- Revisar el seguimiento de ER para consultas duplicadas.
- Vea cuántos registros se obtienen y evalúe cuántos datos deberían obtenerse teóricamente.
Si ve que la mayor parte del tiempo de CPU lo consumen las funciones que se utilizan, intente encontrar el lugar en la configuración que consume más recursos.
Si ve que la mayor parte del tiempo de la CPU lo consumen las funciones de recopilación de datos, considere reemplazarlas con SQL group by en el lado de asignación del modelo.
Recopilación de datos
Dependiendo de su entorno, hay varias formas de recopilar los datos disponibles:
Obtenga el tiempo total de ejecución:
- Desde el centro de actividades
- Desde el registro de eventos
Perfile la ejecución:
- Mediante el uso de herramientas de ER
- Utilizando Trace parser
- Utilizando PerfView
Recopilando datos en un entorno de producción
A veces, los problemas solo se pueden reproducir en un entorno de producción. Los datos se pueden recopilar de las maneras siguientes:
- Usando seguimientos Trace parser
- Mediante el uso de seguimiento de Ejecución de ER
- Utilizando el tiempo total de ejecución
Recopilando datos en un entorno de desarrollo
Además de las herramientas que se pueden utilizar en un entorno de producción, existen varias herramientas que se pueden utilizar en un entorno de desarrollo:
- Registro de eventos (Microsoft-Dynamics-ElectronicReporting). Este registro puede darle el tiempo total de ejecución.
- Herramientas de .NET comunes, como PerfView.
Además, un entorno de desarrollo le brinda más flexibilidad para experimentar. Por ejemplo, puede desactivar partes de los informes para ver cómo se ve afectado el tiempo de ejecución.
Herramientas
Tiempo de ejecución en el centro de actividades
ER puede mostrar el tiempo de ejecución de la configuración en el Centro de actividades. Esta opción funciona solo para un usuario específico y una empresa específica, y solo para sesiones interactivas. Para que esta función esté disponible, siga estos pasos.
- Vaya a Administración de la organización>Informes electrónicos>Configuraciones.
- En la página Configuraciones, en el panel de acciones, en la pestaña Configuraciones, en el grupo Configuración avanzada, seleccione Parámetros de usuario.
- En el cuadro de diálogo Parámetros de usuario, establezca la opción Mostrar tiempo de creación de archivo a Sí.
Tiempo de ejecución en el registro de eventos
- Abra el visor de eventos de Windows.
- Bajo Registros de aplicaciones y servicios, abra Microsoft-Dynamics-ElectronicReporting/Operational.
- Busque eventos FormatMapingRun, donde EventID=2, porque estos eventos contienen la información sobre el tiempo transcurrido.
Seguimientos de Trace Parser
Debido a que ER está implementado en X++, puede utilizar herramientas comunes de X++ para analizar el rendimiento. Para más información, consulte Realizar seguimientos mediante Trace parser.
Hay algunas limitaciones para este enfoque. Debido a que parte de ER se implementa en C#, no todos los detalles estarán disponibles. Sin embargo, puede ver los detalles del uso de datos. Además, las ejecuciones de informes largas pueden superar las limitaciones de almacenamiento de seguimiento.
Seguimientos de ER
ER puede recopilar sus propios seguimientos y tiene herramientas de visualización y análisis para esos seguimientos. Para obtener más información, vea Realizar un seguimiento de la ejecución de los formatos de ER para solucionar problemas de rendimiento.
PerfView
Debido a que tanto X++ como ER se implementan sobre la plataforma .NET, puede usar herramientas .NET comunes. Por ejemplo, puede utilizar la herramienta gratuita PerfView.
También puede recopilar datos desde la línea de comandos. Por ejemplo, el siguiente script de Windows PowerShell recopila el tiempo de ejecución hasta que se detiene la ejecución de cualquier formato en la máquina.
c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
-CircularMB:20000 -ThreadTime `
-NoNGenRundown `
-StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop
Hay algunas limitaciones para este enfoque. Debe tener acceso de administrador para la máquina. Además, debe ser un desarrollador experimentado, porque hay una curva de aprendizaje pronunciada.
Realización de cambios
Usar almacenamiento en caché
Aunque el almacenamiento en caché reduce la cantidad de tiempo que se requiere para recuperar datos nuevamente, consume memoria. Utilice el almacenamiento en caché en los casos en que la cantidad de datos obtenidos no sea muy grande. Para obtener más información y un ejemplo que muestra cómo utilizar el almacenamiento en caché, consulte Mejorar el seguimiento del modelo en función de la información del seguimiento de ejecución.
Reducir el volumen de datos obtenidos
Puede reducir el consumo de memoria para el almacenamiento en caché limitando la cantidad de campos de los registros de una tabla de aplicación que se obtendrán en tiempo de ejecución. En este caso, obtendrá solo los valores de campos de una tabla de aplicación que necesite en su asignación de modelo de ER. No se recuperarán otros campos de esa tabla. Por lo tanto, se reduce el volumen de memoria que se requiere para almacenar en caché los registros obtenidos. Para más información, consulte Mejorar el rendimiento de las soluciones de ER al reducir la cantidad de campos de tabla que se localizan en runtime.
Utilice un campo calculado parametrizado almacenado en caché
A veces, los valores deben buscarse repetidamente. Los ejemplos incluyen nombres de cuentas y números de cuentas. Para ayudar a ahorrar tiempo, puede crear un campo calculado que tenga parámetros en el nivel superior y luego agregar el campo a la caché.
Le recomendamos que utilice este enfoque solo cuando el tamaño de los datos en caché sea pequeño. Para más información, consulte Mejorar el rendimiento de las soluciones de ER agregando orígenes de datos de CAMPO CALCULADO parametrizados.
Uso de un origen de datos JOIN
Un origen de datos JOIN permite que una consulta obtenga varios registros conectados. No es necesario utilizar una consulta separada para obtener cada registro conectado. Por ejemplo, si tiene 1000 líneas y obtiene datos de artículo para cada línea por relación, tendrá 1001 consultas (= 1000 + 1). Si usa un origen de datos JOIN, utilizará solo una consulta para obtener los mismos datos. Para obtener más información, consulte Usar los orígenes de datos de JOIN en asignaciones de modelos de ER para obtener datos de varias tablas de aplicación
Utilice la función FILTER en lugar de la función WHERE
La función FILTER ejecuta condiciones en SQL Server, mientras que la función WHERE obtiene todos los datos de la lista, un registro a la vez, y aplica la condición para cada registro. Por ejemplo, desea seleccionar un registro de 1000 registros. Si utiliza WHERE, se recuperarán los 1000 registros. Sin embargo, si usa FILTER, se obtendrá exactamente un registro. FILTER también puede usar índices en el lado de la base de datos.
Uso de funciones de datos recopilados o un origen de datos de datos acumulados
Si su configuración tiene un componente group by que resume los datos obtenidos previamente por informe, el componente recuperará todos los datos nuevamente. Al utilizar las funciones de datos recopilados, habilita a ER para acumular datos durante la primera búsqueda. Para más información, consulte ER Configurar el formato para contar y sumar.
Reescribir partes de la configuración en X++
ER admite métodos de llamada de tablas y clases, incluidas las extensiones. Considere la posibilidad de reescribir partes de la asignación del modelo en X++ para ayudar a mejorar el rendimiento.
ER puede consumir datos de las siguientes fuentes:
- Clases (orígenes de datos objeto y clase)
- Tablas (orígenes de datos mesa y registros de la tabla)
La Interfaz de programación de aplicaciones (API) de ER también proporciona una forma de enviar datos precalculados desde el código de llamada. El paquete de aplicaciones contiene numerosos ejemplos de este enfoque.