Optimice el rendimiento de su aplicación modernizada AWS Blu Age - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Optimice el rendimiento de su aplicación modernizada AWS Blu Age

Vishal Jaswani, Manish Roy e Himanshu Sah, Amazon Web Services

Resumen

Las aplicaciones de mainframe que se modernizan con AWS Blu Age requieren pruebas de equivalencia funcional y de rendimiento antes de implementarlas en producción. En las pruebas de rendimiento, las aplicaciones modernizadas pueden funcionar más lentamente que los sistemas heredados, especialmente en trabajos por lotes complejos. Esta disparidad se debe a que las aplicaciones de mainframe son monolíticas, mientras que las aplicaciones modernas utilizan arquitecturas de varios niveles. Este patrón presenta técnicas de optimización para abordar estas brechas de rendimiento en las aplicaciones que se modernizan mediante la refactorización automatizada con Blu Age. AWS

El patrón utiliza el marco de modernización de AWS Blu Age con capacidades nativas de Java y ajuste de bases de datos para identificar y resolver los cuellos de botella en el rendimiento. El patrón describe cómo puede utilizar la creación de perfiles y la supervisión para identificar los problemas de rendimiento con métricas como los tiempos de ejecución de SQL, el uso de la memoria y los patrones. I/O A continuación, se explica cómo aplicar las optimizaciones específicas, como la reestructuración de las consultas de las bases de datos, el almacenamiento en caché y el perfeccionamiento de la lógica empresarial.

Las mejoras en los tiempos de procesamiento por lotes y en la utilización de los recursos del sistema le ayudan a igualar los niveles de rendimiento del mainframe en sus sistemas modernizados. Este enfoque mantiene la equivalencia funcional durante la transición a arquitecturas modernas basadas en la nube.

Para utilizar este patrón, configure el sistema e identifique los puntos críticos de rendimiento siguiendo las instrucciones de la sección Epics, y aplique las técnicas de optimización que se describen en detalle en la sección de arquitectura.

Requisitos previos y limitaciones

Requisitos previos 

  • Una aplicación AWS modernizada de la era azul

  • ¿Una licencia JProfiler

  • Privilegios administrativos para instalar herramientas de creación de perfiles y clientes de bases de datos

  • AWS Certificación Blue Age de nivel 3

  • Comprensión de nivel intermedio del marco AWS Blu Age, la estructura del código generado y la programación en Java

Limitaciones

Las siguientes funciones y capacidades de optimización están fuera del alcance de este patrón:

  • Optimización de la latencia de la red entre los niveles de aplicación

  • Optimizaciones a nivel de infraestructura mediante tipos de instancias de Amazon Elastic Compute Cloud (Amazon EC2) y optimización del almacenamiento

  • Pruebas simultáneas de carga de usuarios y pruebas de stress

Versiones de producto

  • JProfiler versión 13.0 o posterior (recomendamos la última versión)

  • pgAdmin versión 8.14 o posterior

Arquitectura

Este patrón configura un entorno de creación de perfiles para una aplicación de AWS Blu Age mediante herramientas como JProfiler pgAdmin. Es compatible con la optimización mediante el SQLExecution generador DAOManager y el generador APIs proporcionado por AWS Blu Age.

El resto de esta sección proporciona información detallada y ejemplos para identificar los puntos críticos de rendimiento y las estrategias de optimización para sus aplicaciones modernizadas. Los pasos de la sección Epics se refieren a esta información para obtener más información.

Identificar los puntos críticos de rendimiento en las aplicaciones de mainframe modernizadas

En las aplicaciones de mainframe modernizadas, los puntos críticos de rendimiento son áreas específicas del código que provocan ralentizaciones o ineficiencias significativas. Estos puntos críticos suelen deberse a las diferencias arquitectónicas entre el mainframe y las aplicaciones modernizadas. Para identificar estos obstáculos en el rendimiento y optimizar el rendimiento de la aplicación modernizada, puede utilizar tres técnicas: el registro de SQL, un plan de consultas y el análisis. EXPLAIN JProfiler

Técnica de identificación de puntos de acceso: registro SQL

Las aplicaciones Java modernas, incluidas las que se han modernizado con AWS Blu Age, tienen funciones integradas para registrar consultas SQL. Puede habilitar registradores específicos en los proyectos de AWS Blu Age para rastrear y analizar las sentencias SQL ejecutadas por su aplicación. Esta técnica es particularmente útil para identificar patrones ineficientes de acceso a las bases de datos, como el exceso de consultas individuales o las llamadas a las bases de datos mal estructuradas, que podrían optimizarse mediante el procesamiento por lotes o el refinamiento de las consultas.

Para implementar el registro SQL en su aplicación modernizada de AWS Blu Age, establezca el nivel de registro en las sentencias SQL del application.properties archivo DEBUG para capturar los detalles de la ejecución de las consultas:

level.org.springframework.beans.factory.support.DefaultListableBeanFactory : WARN level.com.netfective.bluage.gapwalk.runtime.sort.internal: WARN level.org.springframework.jdbc.core.StatementCreatorUtils: DEBUG level.com.netfective.bluage.gapwalk.rt.blu4iv.dao: DEBUG level.com.fiserv.signature: DEBUG level.com.netfective.bluage.gapwalk.database.support.central: DEBUG level.com.netfective.bluage.gapwalk.rt.db.configuration.DatabaseConfiguration: DEBUG level.com.netfective.bluage.gapwalk.rt.db.DatabaseInteractionLoggerUtils: DEBUG level.com.netfective.bluage.gapwalk.database.support.AbstractDatabaseSupport: DEBUG level.com.netfective.bluage.gapwalk.rt: DEBUG

Supervise las consultas de alta frecuencia y de bajo rendimiento utilizando los datos registrados para identificar los objetivos de optimización. Concéntrese en las consultas dentro de los procesos por lotes, ya que suelen tener el mayor impacto en el rendimiento.

Técnica de identificación de puntos críticos: plan Query EXPLAIN

Este método utiliza las capacidades de planificación de consultas de los sistemas de gestión de bases de datos relacionales. Puede utilizar comandos como EXPLAIN los de PostgreSQL o MySQLEXPLAIN PLAN, o de Oracle, para examinar cómo pretende ejecutar su base de datos una consulta determinada. El resultado de estos comandos proporciona información valiosa sobre la estrategia de ejecución de la consulta, por ejemplo, si se utilizarán índices o si se realizarán escaneos de tablas completas. Esta información es fundamental para optimizar el rendimiento de las consultas, especialmente en los casos en que una indexación adecuada puede reducir considerablemente el tiempo de ejecución.

Extraiga las consultas SQL más repetitivas de los registros de la aplicación y analice la ruta de ejecución de las consultas de rendimiento lento mediante el EXPLAIN comando específico de su base de datos. A continuación, se muestra un ejemplo de una base de datos PostgreSQL.

Consulta:

SELECT * FROM tenk1 WHERE unique1 < 100;

Comando de EXPLAIN:

EXPLAIN SELECT * FROM tenk1 where unique1 < 100;

Salida:

Bitmap Heap Scan on tenk1 (cost=5.06..224.98 rows=100 width=244) Recheck Cond: (unique1 < 100) -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..5.04 rows=100 width=0) Index Cond: (unique1 < 100)

Puede interpretar el EXPLAIN resultado de la siguiente manera:

  • Lea el EXPLAIN plan desde las operaciones más internas hasta las más externas (de abajo hacia arriba).

  • Busque los términos clave. Por ejemplo, Seq Scan indica un análisis completo de la tabla y Index Scan muestra el uso del índice.

  • Compruebe los valores de costo: el primer número es el costo inicial y el segundo número es el costo total.

  • Consulte el rows valor del número estimado de filas de salida.

En este ejemplo, el motor de consultas utiliza un análisis de índice para buscar las filas coincidentes y, a continuación, busca solo esas filas (Bitmap Heap Scan). Esto es más eficiente que escanear toda la tabla, a pesar del mayor costo del acceso a las filas individuales.

Las operaciones de escaneo de tablas incluidas en el resultado de un EXPLAIN plan indican que falta un índice. La optimización requiere la creación de un índice adecuado.

Técnica de identificación de puntos críticos: análisis JProfiler

JProfiler es una completa herramienta de creación de perfiles de Java que le ayuda a resolver los cuellos de botella en el rendimiento al identificar las llamadas lentas a las bases de datos y las llamadas que requieren un uso intensivo de la CPU. Esta herramienta es particularmente eficaz para identificar las consultas SQL lentas y el uso ineficiente de la memoria.

Ejemplo de análisis para una consulta:

select evt. com.netfective.bluage.gapwalk.rt.blu4iv.dao.Blu4ivTableManager.queryNonTrasactional

La vista de puntos JProfiler calientes proporciona la siguiente información:

  • Columna de tiempo

    • Muestra la duración total de la ejecución (por ejemplo, 329 segundos)

    • Muestra el porcentaje del tiempo total de aplicación (por ejemplo, el 58,7%)

    • Ayuda a identificar las operaciones que más tiempo consumen

  • Columna de tiempo medio

    • Muestra la duración de cada ejecución (por ejemplo, 2.692 microsegundos)

    • Indica el rendimiento de cada operación

    • Ayuda a detectar operaciones individuales lentas

  • Columna de eventos

    • Muestra el recuento de ejecuciones (por ejemplo, 122.387 veces)

    • Indica la frecuencia de operación

    • Ayuda a identificar los métodos que se llaman con frecuencia

Para ver los resultados del ejemplo:

  • Frecuencia alta: 122 387 ejecuciones indican un potencial de optimización

  • Problema de rendimiento: 2.692 microsegundos durante un tiempo medio sugiere ineficiencia

  • Impacto crítico: el 58,7% del tiempo total indica un obstáculo importante

JProfiler puede analizar el comportamiento de la aplicación en tiempo de ejecución para detectar puntos críticos que podrían no ser evidentes mediante el análisis de código estático o el registro de SQL. Estas métricas le ayudan a identificar las operaciones que necesitan optimizarse y a determinar la estrategia de optimización que sería más eficaz. Para obtener más información sobre JProfiler las funciones, consulte la JProfiler documentación.

Si utiliza estas tres técnicas (registro de SQL, EXPLAIN plan de consultas y JProfiler) en combinación, puede obtener una visión holística de las características de rendimiento de la aplicación. Al identificar y abordar los puntos críticos de rendimiento más críticos, puede cerrar la brecha de rendimiento entre su aplicación de mainframe original y su sistema modernizado basado en la nube.

Tras identificar los puntos críticos de rendimiento de su aplicación, puede aplicar estrategias de optimización, que se explican en la siguiente sección.

Estrategias de optimización para la modernización del mainframe

En esta sección se describen las estrategias clave para optimizar las aplicaciones que se han modernizado a partir de sistemas de mainframe. Se centra en tres estrategias: utilizar las existentes APIs, implementar un almacenamiento en caché eficaz y optimizar la lógica empresarial.

Estrategia de optimización: utilizar la existente APIs

AWS Blu Age proporciona varias interfaces DAO potentes APIs que puede utilizar para optimizar el rendimiento. Dos interfaces principales, DAOManager y SQLExecution Builder, ofrecen capacidades para mejorar el rendimiento de las aplicaciones.

DAOManager

DAOManager sirve como interfaz principal para las operaciones de bases de datos en aplicaciones modernizadas. Ofrece varios métodos para mejorar las operaciones de las bases de datos y mejorar el rendimiento de las aplicaciones, especialmente para las operaciones sencillas de creación, lectura, actualización y eliminación (CRUD) y el procesamiento por lotes.

  • Uso SetMaxResults. En la DAOManager API, puede usar el SetMaxResultsmétodo para especificar el número máximo de registros que se van a recuperar en una sola operación de base de datos. De forma predeterminada, DAOManager recupera solo 10 registros a la vez, lo que puede provocar varias llamadas a la base de datos al procesar conjuntos de datos de gran tamaño. Utilice esta optimización cuando su aplicación necesite procesar una gran cantidad de registros y actualmente esté realizando varias llamadas a bases de datos para recuperarlos. Esto resulta particularmente útil en escenarios de procesamiento por lotes en los que se realiza una iteración a través de un conjunto de datos grande. En el siguiente ejemplo, el código de la izquierda (antes de la optimización) usa el valor de recuperación de datos predeterminado de 10 registros. El código de la derecha (después de la optimización) se configura setMaxResultspara recuperar 100.000 registros a la vez.

    Ejemplo de uso SetMaxResults para evitar múltiples llamadas a la base de datos.
    nota

    Elija lotes más grandes con cuidado y compruebe el tamaño del objeto, ya que esta optimización aumenta el consumo de memoria.

  • SetOnGreatorOrEqual Sustitúyalo por SetOnEqual. Esta optimización implica cambiar el método que se utiliza para establecer la condición de recuperación de registros. El SetOnGreatorOrEqualmétodo recupera los registros que son mayores o iguales a un valor especificado, mientras que solo SetOnEqualrecupera los registros que coinciden exactamente con el valor especificado.

    SetOnEqualUtilícelo como se ilustra en el siguiente ejemplo de código cuando sepa que necesita coincidencias exactas y esté utilizando actualmente el SetOnGreatorOrEqualmétodo seguido de readNextEqual(). Esta optimización reduce la recuperación de datos innecesaria.

    Ejemplo de uso SetOnEqual para recuperar registros en función de una coincidencia exacta.
  • Utilice operaciones de escritura y actualización por lotes. Puede utilizar las operaciones por lotes para agrupar varias operaciones de escritura o actualización en una sola transacción de base de datos. Esto reduce el número de llamadas a la base de datos y puede mejorar considerablemente el rendimiento de las operaciones que implican varios registros.

    En el siguiente ejemplo, el código de la izquierda realiza operaciones de escritura en bucle, lo que ralentiza el rendimiento de la aplicación. Puede optimizar este código mediante una operación de escritura por lotes: durante cada iteración del WHILE bucle, se añaden registros a un lote hasta que el tamaño del lote alcance un tamaño predeterminado de 100. A continuación, puede vaciar el lote cuando alcance el tamaño de lote predeterminado y, a continuación, vaciar los registros restantes en la base de datos. Esto resulta especialmente útil en situaciones en las que se procesan conjuntos de datos de gran tamaño que requieren actualizaciones.

    Ejemplo de agrupación de varias operaciones en una sola transacción de base de datos.
  • Añada índices. Agregar índices es una optimización a nivel de base de datos que puede mejorar considerablemente el rendimiento de las consultas. Un índice permite a la base de datos localizar rápidamente las filas con un valor de columna específico sin tener que escanear toda la tabla. Utilice la indexación en las columnas que se utilizan con frecuencia en WHERE cláusulas, JOIN condiciones o ORDER BY declaraciones. Esto es particularmente importante para tablas grandes o cuando la recuperación rápida de datos es crucial.

SQLExecutionConstructor

SQLExecutionBuilder es una API flexible que puede utilizar para controlar las consultas SQL que se ejecutarán, recuperar solo determinadas columnas mediante SELECT el uso de nombres de tablas dinámicas y utilizar nombres de tablas dinámicas. INSERT En el siguiente ejemplo, SQLExecutor Builder usa una consulta personalizada que usted defina.

Ejemplo de uso de SQLExecutor Builder con una consulta personalizada.

Elegir entre DAOManager y SQLExecution Builder

La elección entre estas opciones APIs depende del caso de uso específico:

  • Úselo DAOManager cuando desee que AWS Blu Age Runtime genere las consultas SQL en lugar de escribirlas usted mismo.

  • Elija SQLExecution Builder cuando necesite escribir consultas SQL para aprovechar las funciones específicas de la base de datos o escribir consultas SQL óptimas.

Estrategia de optimización: almacenamiento en caché

En las aplicaciones modernizadas, la implementación de estrategias de almacenamiento en caché eficaces puede reducir significativamente las llamadas a las bases de datos y mejorar los tiempos de respuesta. Esto ayuda a cerrar la brecha de rendimiento entre los entornos de mainframe y de nube.

En las aplicaciones de AWS Blu Age, las implementaciones de almacenamiento en caché sencillas utilizan estructuras de datos internas, como mapas hash o listas de matrices, por lo que no es necesario configurar una solución de almacenamiento en caché externa que requiera una reestructuración de costes y código. Este enfoque es particularmente eficaz para los datos a los que se accede con frecuencia, pero que cambian con poca frecuencia. Al implementar el almacenamiento en caché, tenga en cuenta las limitaciones de memoria y actualice los patrones para garantizar que los datos almacenados en caché permanezcan consistentes y proporcionen beneficios de rendimiento reales.

La clave para un almacenamiento en caché exitoso es identificar los datos correctos para almacenar en caché. En el siguiente ejemplo, el código de la izquierda siempre lee los datos de la tabla, mientras que el código de la derecha lee los datos de la tabla cuando el mapa hash local no tiene un valor para una clave determinada. cacheMapes un objeto de mapa hash que se crea en el contexto del programa y se borra con el método de limpieza del contexto del programa.

Almacenamiento en caché con: DAOManager

Ejemplo de optimizaciones de almacenamiento en caché con. DAOManager

Almacenamiento en caché con Builder: SQLExecution

Ejemplo de optimizaciones de almacenamiento en caché con Builder. SQLExecution

Estrategia de optimización: optimización de la lógica empresarial

La optimización de la lógica empresarial se centra en reestructurar el código generado automáticamente por AWS Blu Age para alinearlo mejor con las capacidades de la arquitectura moderna. Esto se hace necesario cuando el código generado mantiene la misma estructura lógica que el código de mainframe heredado, lo que puede no ser óptimo para los sistemas modernos. El objetivo es mejorar el rendimiento y, al mismo tiempo, mantener la equivalencia funcional con la aplicación original.

Este enfoque de optimización va más allá de los simples ajustes de la API y las estrategias de almacenamiento en caché. Implica cambios en la forma en que la aplicación procesa los datos e interactúa con la base de datos. Las optimizaciones más comunes incluyen evitar operaciones de lectura innecesarias para actualizaciones sencillas, eliminar las llamadas redundantes a las bases de datos y reestructurar los patrones de acceso a los datos para adaptarlos mejor a la arquitectura de aplicaciones moderna. A continuación se muestran algunos ejemplos:

  • Actualizar los datos directamente en la base de datos.Reestructure su lógica empresarial mediante actualizaciones directas de SQL en lugar de DAOManager realizar múltiples operaciones con bucles. Por ejemplo, el siguiente código (lado izquierdo) realiza varias llamadas a la base de datos y utiliza un exceso de memoria. En concreto, utiliza varias operaciones de lectura y escritura de bases de datos dentro de bucles, actualizaciones individuales en lugar de procesarlas por lotes y crear objetos innecesarios para cada iteración.

    El siguiente código optimizado (lado derecho) utiliza una sola operación de actualización de Direct SQL. En concreto, utiliza una sola llamada a la base de datos en lugar de varias llamadas y no requiere bucles, ya que todas las actualizaciones se gestionan en una sola instrucción. Esta optimización proporciona un mejor rendimiento y una mejor utilización de los recursos, y reduce la complejidad. Evita la inyección de SQL, proporciona un mejor almacenamiento en caché del plan de consultas y ayuda a mejorar la seguridad.

    Reestructuración del código mediante actualizaciones directas de SQL en lugar de DAOManager operaciones con bucles.
    nota

    Utilice siempre consultas parametrizadas para evitar la inyección de SQL y garantizar una gestión adecuada de las transacciones.

  • Reducir las llamadas redundantes a las bases de datos. Las llamadas redundantes a las bases de datos pueden afectar significativamente al rendimiento de las aplicaciones, especialmente cuando se producen dentro de bucles. Una técnica de optimización simple pero eficaz consiste en evitar repetir la misma consulta de base de datos varias veces. La siguiente comparación de código demuestra cómo al mover la llamada a la retrieve() base de datos fuera del ciclo se evita la ejecución redundante de consultas idénticas, lo que mejora la eficiencia.

  • Reducir las llamadas a la base de datos mediante la JOIN cláusula SQL. Implemente SQLExecution Builder para minimizar las llamadas a la base de datos. SQLExecutionBuilder proporciona un mayor control sobre la generación de SQL y es particularmente útil para consultas complejas que DAOManager no se pueden gestionar de manera eficiente. Por ejemplo, el código siguiente utiliza varias DAOManager llamadas:

    List<Employee> employees = daoManager.readAll(); for(Employee emp : employees) { Department dept = deptManager.readById(emp.getDeptId()); // Additional call for each employee Project proj = projManager.readById(emp.getProjId()); // Another call for each employee processEmployeeData(emp, dept, proj); }

    El código optimizado usa una sola llamada a la base de datos en SQLExecution Builder:

    SQLExecutionBuilder builder = new SQLExecutionBuilder(); builder.append("SELECT e.*, d.name as dept_name, p.name as proj_name"); builder.append("FROM employee e"); builder.append("JOIN department d ON e.dept_id = d.id"); builder.append("JOIN project p ON e.proj_id = p.id"); builder.append("WHERE e.status = ?", "ACTIVE"); List<Map<String, Object>> results = builder.execute(); // Single database call for(Map<String, Object> result : results) { processComplexData(result); }

Uso conjunto de estrategias de optimización

Estas tres estrategias funcionan de forma sinérgica: APIs proporcionan las herramientas para un acceso eficiente a los datos, el almacenamiento en caché reduce la necesidad de recuperar datos repetidamente y la optimización de la lógica empresarial garantiza que APIs se utilicen de la manera más eficaz posible. La supervisión y el ajuste periódicos de estas optimizaciones garantizan una mejora continua del rendimiento y, al mismo tiempo, mantienen la fiabilidad y la funcionalidad de la aplicación modernizada. La clave del éxito reside en comprender cuándo y cómo aplicar cada estrategia en función de las características y los objetivos de rendimiento de la aplicación.

Herramientas

  • JProfileres una herramienta de creación de perfiles de Java diseñada para desarrolladores e ingenieros de rendimiento. Analiza las aplicaciones Java y ayuda a identificar los cuellos de botella en el rendimiento, las pérdidas de memoria y los problemas de subprocesos. JProfiler ofrece perfiles de CPU, memoria y subprocesos, así como supervisión de bases de datos y máquinas virtuales Java (JVM) para proporcionar información sobre el comportamiento de las aplicaciones.

    nota

    Como alternativa JProfiler, puede utilizar Java VisualVM. Se trata de una herramienta de monitorización y creación de perfiles de rendimiento gratuita y de código abierto para aplicaciones Java que permite monitorizar en tiempo real el uso de la CPU, el consumo de memoria, la gestión de subprocesos y las estadísticas de recolección de elementos no utilizados. Dado que Java VisualVM es una herramienta JDK integrada, resulta más rentable que JProfiler para las necesidades básicas de creación de perfiles.

  • pgAdmin es una herramienta de administración y desarrollo de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos. Puede usar pgAdmin para realizar una amplia gama de tareas, desde escribir consultas SQL sencillas hasta desarrollar bases de datos complejas. Sus características incluyen un editor SQL para resaltar la sintaxis, un editor de código del lado del servidor, un agente de programación para tareas de SQL, shell y lotes, y soporte para todas las funciones de PostgreSQL tanto para usuarios novatos como experimentados de PostgreSQL.

Prácticas recomendadas

Identificación de los puntos críticos de rendimiento:

  • Documente las métricas de rendimiento básicas antes de iniciar las optimizaciones.

  • Establezca objetivos claros de mejora del rendimiento en función de los requisitos empresariales.

  • Al realizar una evaluación comparativa, desactive el registro detallado, ya que puede afectar al rendimiento.

  • Configure un conjunto de pruebas de rendimiento y ejecútelo periódicamente.

  • Utilice la última versión de pgAdmin. (Las versiones anteriores no admiten el plan de EXPLAIN consultas).

  • Para realizar una evaluación comparativa, desconéctese una JProfiler vez que se hayan completado las optimizaciones, ya que esto aumenta la latencia.

  • Para realizar una evaluación comparativa, asegúrese de ejecutar el servidor en modo de inicio en lugar de en modo de depuración, ya que el modo de depuración aumenta la latencia.

Estrategias de optimización:

  • Configure SetMaxResultslos valores en el application.yaml archivo para especificar lotes del tamaño correcto de acuerdo con las especificaciones de su sistema.

  • Configure SetMaxResultslos valores en función del volumen de datos y las restricciones de memoria.

  • Cambie SetOnGreatorOrEquala SetOnEqualsolo cuando se realicen llamadas posteriores.readNextEqual().

  • En las operaciones de escritura o actualización por lotes, gestione el último lote por separado, ya que podría ser más pequeño que el tamaño del lote configurado y podría pasarse por alto durante la operación de escritura o actualización.

Almacenamiento en caché:

  • Los campos que se introducen para el almacenamiento en cachéprocessImpl, que mutan con cada ejecución, siempre deben definirse en ese contexto. processImpl Los campos también deben borrarse mediante el método doReset() ocleanUp().

  • Cuando implementes el almacenamiento en caché en memoria, ajusta el tamaño correcto de la caché. Las cachés muy grandes que se almacenan en la memoria pueden ocupar todos los recursos, lo que podría afectar al rendimiento general de la aplicación.

SQLExecutionConstructor:

  • Para las consultas que planea usar en SQLExecution Builder, utilice nombres clave comoPROGRAMNAME_STATEMENTNUMBER.

  • Cuando utilice SQLExecution Builder, compruebe siempre el Sqlcod campo. Este campo contiene un valor que especifica si la consulta se ejecutó correctamente o si se produjo algún error.

  • Utilice consultas parametrizadas para evitar la inyección de SQL.

Optimización de la lógica empresarial:

  • Mantenga la equivalencia funcional al reestructurar el código y ejecute pruebas de regresión y comparaciones de bases de datos para el subconjunto de programas correspondiente.

  • Mantenga instantáneas de creación de perfiles para poder compararlas.

Epics

TareaDescripciónHabilidades requeridas

Instalar y configurar. JProfiler

  1. En la página de JProfiler descargas, descárguelo JProfiler para su sistema operativo (Windows, macOS o Linux).

  2. Complete el proceso de instalación siguiendo las instrucciones de la JProfiler documentación.

  3. Realice la configuración inicial:

    1. Inicie la JProfiler aplicación.

    2. Active la clave de licencia.

    3. Configure los ajustes predeterminados de la JVM.

  4. Verificar la instalación:

    1. Lanzamiento JProfiler.

    2. Ejecute una sesión de prueba de creación de perfiles. Para obtener instrucciones, consulte Conexión a servicios locales en la sección Creación de perfiles de una JVM de la documentación. JProfiler

Desarrollador de aplicaciones

Instale y configure pgAdmin.

En este paso, debe instalar y configurar un cliente de base de datos para consultar su base de datos. Este patrón utiliza una base de datos PostgreSQL y pgAdmin como cliente de base de datos. Si utiliza otro motor de base de datos, siga la documentación del cliente de base de datos correspondiente.

  1. Descargue e instale pgAdmin para su sistema operativo desde la página de descargas de pgAdmin. Establezca la contraseña maestra durante la instalación.

  2. Conéctese al servidor de base de datos. Para obtener instrucciones, consulte la documentación de pgAdmin.

  3. Compruebe la instalación mediante la herramienta de consulta de PGAdmin para ejecutar consultas SQL básicas.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Habilite el registro de consultas SQL en su aplicación AWS Blu Age.

Habilite los registradores para el registro de consultas SQL en el application.properties archivo de su aplicación AWS Blu Age, tal y como se explica en la sección de Arquitectura.

Desarrollador de aplicaciones

Genere y analice EXPLAIN planes de consultas para identificar los puntos críticos de rendimiento de las bases de datos.

Para obtener más información, consulte la sección Arquitectura.

Desarrollador de aplicaciones

Cree una JProfiler instantánea para analizar un caso de prueba de rendimiento lento.

  1. Lanzamiento: JProfiler

    1. Abre la JProfiler aplicación.

    2. En el Centro de inicio, seleccione la pestaña Conexión rápida.

    3. Seleccione el proceso de Tomcat de la lista.

    4. Elija Iniciar.

  2. Configure los ajustes de creación de perfiles:

    1. Elija la opción de muestreo recomendada.

    2. Mantenga las opciones predeterminadas en la pantalla de configuración y, a continuación, pulse Aceptar.

    3. Espere a que aparezca el estado Conectado en la barra de estado.

  3. Registre los datos de rendimiento:

    1. En la barra de herramientas, selecciona Iniciar grabación.

    2. Ejecute su caso de prueba y espere a que se complete.

    3. Selecciona Detener grabación.

  4. Guarde y visualice la instantánea:

    1. Seleccione Guardar instantánea.

    2. Elija la ubicación en la que desee guardar la instantánea y, a continuación, seleccione Guardar.

Desarrollador de aplicaciones

Analice la JProfiler instantánea para identificar los cuellos de botella en el rendimiento.

Siga estos pasos para analizar la instantánea. JProfiler

  1. Abra la instantánea:

    1. Seleccione Archivo y abra la instantánea.

    2. Navegue hasta la ubicación de la instantánea guardada.

    3. Seleccione Abrir una nueva ventana para iniciar el análisis.

  2. Analice las operaciones de bases de datos:

    1. Vaya a la sección JDBC/Database y elija la pestaña JPA/Hibernate.

    2. Revise las consultas por hora (que es la opción de ordenación predeterminada).

    3. Elija la consulta más importante para optimizarla.

  3. Revise el uso de la CPU:

    1. En la sección de CPU, selecciona la vista de zonas activas.

    2. Identifique el código más alto en porcentaje de tiempo para la optimización.

    3. Anote cualquier patrón recurrente.

  4. Tras identificar los puntos críticos, establezca una línea base y, a continuación, implemente las estrategias de optimización adecuadas, tal y como se explica en las siguientes epopeyas. Céntrese en estas optimizaciones:

    • Para consultas lentas, usa SQLExecution Builder o la DAOManager optimización.

    • Para un acceso frecuente a los datos, implemente mecanismos de almacenamiento en caché.

    • En el caso de una lógica empresarial compleja, simplifique la lógica, evite realizar demasiadas llamadas a la base de datos y determine si es posible simplificar el código ejecutando una consulta sencilla. Por ejemplo, si el código inserta datos de la tabla A en la tabla B, vuelva a escribir este código para ejecutar un comando SQL similar al siguiente:

      INSERT INTO TABLE A SELECT * FROM TABLE B
  5. Siga analizando y optimizando el código en orden de impacto (de mayor a menor) hasta que la aplicación cumpla con sus requisitos de rendimiento.

Para obtener más información sobre su uso JProfiler, consulte la sección Arquitectura y la JProfiler documentación.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Establezca una línea base de rendimiento antes de implementar las optimizaciones.

  1. Como medida inicial del rendimiento, ejecute su caso de prueba sin ninguna optimización. Cree una JProfiler instantánea del estado actual y documente las siguientes métricas:

    • Tiempo total de ejecución

    • Número de llamadas a la base de datos

    • Porcentaje de utilización de la CPU

    • Patrón de uso de memoria

  2. Cree una línea base de documento:

    1. Guarde todas las métricas con una marca de tiempo y condiciones de prueba.

    2. Tenga en cuenta cualquier factor externo que pueda afectar al rendimiento.

    3. Guarde la JProfiler instantánea para compararla después de la optimización.

  3. Planifique los cambios de optimización que se describen en la siguiente epopeya:

    1. Revise las métricas de referencia.

    2. Identifique la operación que desea optimizar.

    3. Cree una copia de seguridad del código actual.

    4. Documente las mejoras esperadas.

  4. Mida cada cambio antes de la implementación:

    1. Ejecute un caso de prueba utilizando las condiciones de referencia.

    2. Registre el tiempo de ejecución.

    3. Documente el comportamiento actual.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Optimice la lectura de llamadas.

Optimice la recuperación de datos mediante el DAOManager SetMaxResultsmétodo. Para obtener más información sobre este enfoque, consulte la sección Arquitectura.

Desarrollador de aplicaciones, DAOManager

Refactoriza la lógica empresarial para evitar múltiples llamadas a la base de datos.

Reduzca las llamadas a la base de datos mediante una JOIN cláusula SQL. Para obtener detalles y ejemplos, consulte Optimización de la lógica empresarial en la sección Arquitectura.

Desarrollador de aplicaciones, SQLExecution Builder

Refactoriza el código para usar el almacenamiento en caché para reducir la latencia de las llamadas de lectura.

Para obtener información sobre esta técnica, consulte Almacenamiento en caché en la sección Arquitectura.

Desarrollador de aplicaciones

Reescriba el código ineficiente que utiliza varias DAOManager operaciones para realizar operaciones de actualización sencillas.

Para obtener más información sobre cómo actualizar los datos directamente en la base de datos, consulte Optimización de la lógica empresarial en la sección Arquitectura.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Valide cada cambio de optimización de forma iterativa y, al mismo tiempo, mantenga la equivalencia funcional.

  1. Después de implementar las optimizaciones:

    1. Ejecute los mismos casos de prueba a partir de la línea base que estableció.

    2. Registre el nuevo tiempo de ejecución.

    3. Compruebe que los resultados coincidan con el resultado de referencia.

  2. si la optimización se traduce en una mejora, documente las ganancias reales y, a continuación, pase a la siguiente optimización.

    Si encuentra problemas, anule los cambios, revise su enfoque y pruebe soluciones alternativas.

  3. Realiza un seguimiento del progreso de cada cambio:

    1. Compare las métricas nuevas con las métricas de referencia.

    2. Calcula el porcentaje de mejora.

    3. Mantenga un total acumulado de ganancias.

nota

El uso de métricas de referencia como referencia garantiza una medición precisa del impacto de cada optimización y, al mismo tiempo, mantiene la confiabilidad del sistema.

Desarrollador de aplicaciones

Solución de problemas

ProblemaSolución

Al ejecutar la aplicación moderna, verá una excepción con el errorQuery_ID not found.

Para resolver este problema, siga estos pasos:

  1. Compruebe si query.sql existe un archivo con el nombre en la sql carpeta del directorio de trabajo del servidor de aplicaciones.

  2. Compruebe que el nombre del .sql archivo coincide con el nombre del programa. Por ejemplo, en el caso de un programa denominadoABC, el nombre del archivo debe serABC.sql.

Ha agregado índices, pero no ve ninguna mejora en el rendimiento.

Siga estos pasos para asegurarse de que el motor de consultas utilice el índice:

  1. Si utiliza PostgreSQL, ejecute el comando. EXPLAIN <sql query>

  2. Compruebe el resultado del comando para Seq Scan o. Index Scan Seq Scansignifica que el conjunto de índices no está disponible en las columnas que utiliza la where cláusula de la consulta SQL.

  3. Cree un índice en el conjunto correcto de columnas e intente formar consultas que utilicen el índice creado.

Se encuentra con una out-of-memory excepción.

Compruebe que el código libera la memoria almacenada en la estructura de datos.

Las operaciones de escritura por lotes hacen que falten registros en la tabla

Revise el código para asegurarse de que se realiza una operación de escritura adicional cuando el recuento de lotes no es cero.

El registro SQL no aparece en los registros de la aplicación.

  1. Compruebe la ubicación y la sintaxis del archivo de configuración de registro.

  2. Asegúrese de que el nivel de registro esté establecido DEBUG para los paquetes especificados. Por ejemplo:

    level.com.netfective.bluage.gapwalk.rt.blu4iv.dao: DEBUG level.org.springframework.jdbc.core: DEBUG
  3. Compruebe los permisos del archivo de registro del servidor de aplicaciones.

  4. Reinicie el servidor de aplicaciones tras los cambios de configuración.

Recursos relacionados