优化 AWS Blu Age 现代化应用程序的性能 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

优化 AWS Blu Age 现代化应用程序的性能

Vishal Jaswani、Manish Roy 和 Himanshu Sah,Amazon Web Services

Summary

使用 AWS Blu Age 进行现代化改造的大型机应用程序需要在部署到生产环境之前进行功能和性能等效性测试。在性能测试中,经过现代化的应用程序的运行速度可能比传统系统慢,尤其是在处理复杂的批处理作业时。之所以存在这种差异,是因为大型机应用程序采用单体架构,而现代应用程序则采用多层架构。这种模式提供了一些优化技术,可以解决通过在 Blu Age 中使用自动重构实现现代化的应用程序的 AWS这些性能差距。

该模式使用具有原生 Java 和数据库调整功能的 AWS Blu Age 现代化框架来识别和解决性能瓶颈。该模式描述了如何使用分析和监控来识别性能问题,包括指标(例如 SQL 执行时间、内存利用率和 I/O 模式)。然后阐述了如何实施针对性优化,包括数据库查询重构、缓存技术应用以及业务逻辑优化。

批处理时间的缩短和系统资源使用率的提升,助您在现代化系统中实现与大型机相当的性能水平。在向基于云的现代架构过渡期间,这种方法保持了功能等效性。

要使用此模式,请按照操作说明部分的说明,设置系统并识别性能热点,然后应用架构部分详述的优化技术。

先决条件和限制

先决条件

  • AWS 蓝光时代的现代化应用程序

  • 许可JProfiler 证

  • 安装数据库客户端和性能分析工具的管理权限

  • AWS Blu Age 3 级认证

  • 对 AWS Blu Age 框架、生成的代码结构和 Java 编程有中级水平的了解

限制

以下优化功能和特性超出此模式的范围:

  • 应用程序层之间的网络延迟优化

  • 通过亚马逊弹性计算云 (Amazon) 实例类型和存储优化实现基础设施级优化 EC2

  • 并发用户负载测试和压力测试

产品版本

  • JProfiler 版本 13.0 或更高版本(我们推荐最新版本)

  • pgAdmin 版本 8.14 或更高版本

架构

此模式使用 JProfiler 和 pgadmin 等工具为 AWS Blu Age 应用程序设置分析环境。它支持通过 B AWS lu Age APIs 提供的 DAOManager 和 SQLExecution生成器进行优化。

本节剩余部分将详细说明如何识别现代化应用程序的性能热点,并提供相应的优化策略及示例。执行操作说明部分的步骤时,可参考此信息以获取进一步指导。

识别现代化大型机应用程序中的性能热点

在现代化大型机应用程序中,性能热点是代码中导致严重降速或效率低下的特定区域。这些热点通常是大型机与现代化应用程序之间的架构差异造成的。要识别这些性能瓶颈并优化现代化应用程序的性能,您可以使用三种技术:SQL 日志记录、查询EXPLAIN计划和 JProfiler 分析。

热点识别技术:SQL 日志记录

现代 Java 应用程序,包括那些使用 AWS Blu Age 实现现代化的应用程序,都具有记录 SQL 查询的内置功能。您可以在 Bl AWS u Age 项目中启用特定的记录器来跟踪和分析应用程序执行的 SQL 语句。这种技术对于识别效率低下的数据库访问模式(例如单个查询过多、数据库调用结构不佳)特别有用,可通过批量处理或改进查询来优化。

要在 AWS Blu Age 现代化应用程序中实现 SQL 日志记录,请将application.properties文件中 SQL 语句DEBUG的日志级别设置为,以捕获查询执行的详细信息:

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

利用记录的数据监控高频和低效的查询,从而确定优化目标。请重点关注批处理过程中的查询,因为它们通常对性能影响最大。

热点识别技术:查询 EXPLAIN 计划

此方法使用了关系数据库管理系统的查询规划功能。可以使用不同命令(例如 PostgreSQL 或 MySQL 中的 EXPLAIN、Oracle 中的 EXPLAIN PLAN)检查您的数据库打算如何运行给定查询。这些命令的输出结果能提供有关查询执行策略的宝贵信息,包括是否会使用索引或执行全表扫描。这些信息对于优化查询性能至关重要,尤其是在适当建立索引能显著缩短执行时间的情况下。

使用特定于您的数据库的 EXPLAIN 命令,从应用程序日志中提取重复性最高的 SQL 查询,并分析低效查询的执行路径。以下是 PostgreSQL 数据库的示例。

查询:

SELECT * FROM tenk1 WHERE unique1 < 100;

EXPLAIN 命令:

EXPLAIN SELECT * FROM tenk1 where unique1 < 100;

输出:

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)

可以如下所示解释 EXPLAIN 输出:

  • 请从最内层开始,按照由内而外的方式阅读 EXPLAIN 计划的操作流程(从下至上)。

  • 寻找关键术语。例如,Seq Scan 表示全表扫描,Index Scan 显示索引使用情况。

  • 检查成本值:第一个数字是启动成本,第二个数字是总成本。

  • 如需预计的输出行数,请参阅 rows 值。

在这个示例中,查询引擎使用索引扫描来查找匹配的行,然后仅获取这些行(Bitmap Heap Scan)。尽管单行访问的成本更高,但比整表扫描更高效。

EXPLAIN 计划输出中的表扫描操作表明缺少索引。优化时需要创建适当的索引。

热点识别技术: JProfiler 分析

JProfiler 是一款全面的 Java 分析工具,可通过识别缓慢的数据库调用和 CPU 密集型调用来帮助您解决性能瓶颈。该工具在识别低效的 SQL 查询和内存使用问题方面尤为有效。

查询分析示例:

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

“ JProfiler 热点” 视图提供以下信息:

  • 时间

    • 显示执行总时长(例如 329 秒)

    • 显示占应用程序总时间的百分比(例如 58.7%)

    • 帮助确定最耗时的操作

  • 平均时间

    • 显示每次执行的持续时间(例如 2,692 微秒)

    • 表示单个操作的性能

    • 帮助发现运行缓慢的单个操作

  • 事件

    • 显示执行次数(例如 122,387 次)

    • 表示操作频率

    • 帮助识别频繁调用的方法

对于结果示例:

  • 高频:122,387 次执行表明存在优化空间

  • 性能隐忧:平均时间为 2,692 微秒表明效率低下

  • 严重影响:占总时间的 58.7% 表明存在重大瓶颈

JProfiler 可以分析应用程序的运行时行为,以揭示通过静态代码分析或 SQL 日志记录可能不明显的热点。这些指标可帮助识别需要优化的操作,并确定最有效的优化策略。有关 JProfiler 功能的更多信息,请参阅JProfiler 文档

将这三种技术(SQL 日志记录、查询EXPLAIN计划和 JProfiler)结合使用时,可以全面了解应用程序的性能特征。通过识别和解决最关键的性能热点,可以弥合原始大型机应用程序与基于云的现代化系统之间的性能差距。

确定应用程序的性能热点后,可以应用优化策略,我们将在下一节进行相关介绍。

针对大型机现代化的优化策略

本节主要概述针对大型机系统中已现代化的应用程序的关键优化策略。它侧重于三种策略:使用现有缓存 APIs、实现有效缓存和优化业务逻辑。

优化策略:使用现有的 APIs

AWS Blu Age 提供了几个强大 APIs 的 DAO 接口,你可以用它们来优化性能。两个主要接口—— DAOManager 和 SQLExecution生成器——提供了增强应用程序性能的功能。

DAOManager

DAOManager 充当现代化应用程序中数据库操作的主要接口。其中提供多种方法来增强数据库操作和提升应用程序性能,尤其适用于简单的创建、读取、更新和删除(CRUD)操作以及批量处理。

  • 使用 SetMaxResults。在 DAOManager API 中,您可以使用SetMaxResults方法指定在单个数据库操作中要检索的最大记录数。默认情况下,一次只能 DAOManager 检索 10 条记录,这在处理大型数据集时可能会导致多次数据库调用。当您的应用程序需要处理大量记录,并且当前正在发出多个数据库调用来检索这些记录时,请使用此优化。这在批处理场景中特别有用,尤其是在遍历大型数据集时。在以下示例中,左侧代码(优化前)使用默认的数据检索值:10 条记录。右边的代码(优化后)设置setMaxResults为一次检索 100,000 条记录。

    使用 SetMaxResults 避免多次数据库调用的示例。
    注意

    请谨慎选择较大的批处理大小并检查对象尺寸,因为此优化会增加内存占用。

  • 替换 SetOnGreatorOrEqual 为 SetOnEqual。这种优化涉及更改用于设置记录检索条件的方法。该SetOnGreatorOrEqual方法检索大于或等于指定值的记录,而仅SetOnEqual检索与指定值完全匹配的记录。

    当您知道需要精确匹配并且当前正在使用SetOnEqual后面跟着 readNextEqual()SetOnGreatorOrEqual方法时,请按以下代码示例所示使用。这种优化可以减少不必要的数据检索。

    使用 SetOnEqual 根据精确匹配检索记录的示例。
  • 使用批量写入和更新操作。可以使用批量操作将多个写入或更新操作组合成一个数据库事务。这样可以减少数据库调用次数,并显著提高涉及多条记录的操作的性能。

    在以下示例中,左侧代码在一个循环中执行写入操作,这会降低应用程序的性能。可以使用批量写入操作来优化此代码:在 WHILE 循环的每次迭代中,将记录添加到批次中,直到批次大小达到预定大小 100。然后,当批次达到预定的批次大小时,您可以将其刷新,然后将剩余的记录刷新到数据库中。这在处理需要更新的大型数据集时尤其有用。

    将多个操作组合成一个数据库事务的示例。
  • 添加索引。添加索引属于数据库级别的优化,可以显著提高查询性能。索引可助力数据库快速定位具有特定列值的行,而无需扫描整个表。对 WHERE 子句、JOIN 条件或 ORDER BY 语句中经常使用的列使用索引。在处理大型数据表或需要快速数据检索时,这一点尤为重要。

SQLExecution生成器

SQLExecutionBuilder 是一个灵活的 API,您可以使用它来控制将要执行的 SQL 查询,INSERT通过使用和使用SELECT动态表名仅获取某些列。在以下示例中, SQLExecutorBuilder 使用您定义的自定义查询。

在自定义查询中使用 SQLExecutor Builder 的示例。

在 DAOManager 和 SQLExecution生成器之间进行选择

这两者之间的选择 APIs 取决于您的具体用例:

  • DAOManager 当你希望 AWS Blu Age Runtime 生成 SQL 查询而不是自己编写查询时使用。

  • 当您需要编写 SQL 查询以利用数据库特定的功能或编写最佳 SQL 查询时,请选择 B SQLExecution uilder。

优化策略:应用缓存技术

在现代化应用程序中,实施有效的缓存策略可以显著减少数据库调用次数并提高响应速度。这有助于弥合大型机与云环境之间的性能差距。

在 AWS Blu Age 应用程序中,简单的缓存实现使用内部数据结构,例如哈希映射或数组列表,因此您不必设置需要成本和代码重组的外部缓存解决方案。这种方法对经常被访问但变更频率较低的数据特别有效。在实施缓存策略时,请考虑内存限制和更新模式,以确保缓存的数据保持一致并带来实际的性能优势。

成功缓存的关键在于确定要缓存哪些数据。在以下示例中,左侧代码始终从表中读取数据,而右侧代码仅在本地哈希映射中没有给定键的值时才从表中读取数据。cacheMap 是一个哈希映射对象,在程序上下文中创建,并在程序上下文的清理方法中清除。

使用以下方法进行缓存 DAOManager:

使用 DAOManager进行缓存优化的示例。

使用 SQLExecution生成器缓存:

使用 SQLExecution Builder 进行缓存优化的示例。

优化策略:业务逻辑优化

业务逻辑优化的重点是重构从 AWS Blu Age 自动生成的代码,以更好地与现代架构功能保持一致。当生成的代码保持与传统大型机代码相同的逻辑结构时,这就变得必要了,因为这种逻辑结构可能并不适用于现代系统。目标是在保持与原应用程序功能等效性的同时,提高性能。

这种优化方法不限于简单的 API 调整和缓存策略。还涉及更改应用程序处理数据以及与数据库交互的方式。常见的优化措施包括:避免为简单更新执行不必要的读取操作、删除冗余的数据库调用,以及重组数据访问模式,以更好地与现代应用程序架构保持一致。下面是几个示例:

  • 直接在数据库中更新数据。使用直接 SQL 更新来重构业务逻辑,而不是使用循环进行多项 DAOManager 操作。例如,以下代码(左侧)会进行多次数据库调用,并占用过多内存。具体而言,它在循环中执行多次数据库读写操作,采用逐条更新而非批量处理,且每次迭代都会创建不必要的对象。

    以下经过优化的代码(右侧)仅使用一次直接 SQL 更新操作。具体来说,它使用单个数据库调用(而非多个调用),并且不需要循环,因为所有更新都在单个语句中处理。这种优化提高了性能和资源利用率,并降低了复杂性。它能防止 SQL 注入,提供更好的查询计划缓存,并有助于提高安全性。

    使用直接 SQL 更新而不是循环 DAOManager 操作来重构代码。
    注意

    始终使用参数化查询来防止 SQL 注入,并确保适当管理事务。

  • 减少冗余的数据库调用。冗余的数据库调用会严重影响应用程序性能,尤其是在循环中发生时。一种简单但有效的优化技巧是,避免多次重复执行相同的数据库查询。以下代码比较演示了将 retrieve() 数据库调用移至循环之外可如何防止重复执行相同的查询,从而提高效率。

  • 使用 SQL JOIN 子句减少数据库调用实现 SQLExecution Builder 以最大限度地减少对数据库的调用。 SQLExecutionBuilder 可以更好地控制 SQL 的生成,对于 DAOManager 无法有效处理的复杂查询特别有用。例如,以下代码使用多个 DAOManager 调用:

    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); }

    优化的代码在 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); }

组合使用优化策略

这三种策略协同作用: APIs 提供高效数据访问的工具,缓存可减少重复数据检索的需求,业务逻辑优化可确保以最有效的方式使用 APIs 这些工具。定期监控和调整这些优化措施可确保持续提升性能,同时保持现代化应用程序的可靠性和功能。成功的关键在于,了解何时以及如何根据应用程序的特征和性能目标应用每种策略。

工具

  • JProfiler是一款专为开发人员和性能工程师设计的 Java 分析工具。它分析 Java 应用程序并帮助识别性能瓶颈、内存泄漏和线程问题。 JProfiler 提供 CPU、内存和线程分析以及数据库和 Java 虚拟机 (JVM) 监控,以深入了解应用程序行为。

    注意

    作为替代方案 JProfiler,你可以使用 Java Visual VM。这是适用于 Java 应用程序的免费开源性能分析和监控工具,可实时监控 CPU 使用率、内存消耗、线程管理和垃圾回收统计信息。由于 Java VisualVM 是一个内置的 JDK 工具,因此它比 JProfiler 满足基本分析需求更具成本效益。

  • pgAdmin 是 PostgreSQL 的开源管理和开发工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。可以使用 pgAdmin 执行各种任务,从编写简单的 SQL 查询,到开发复杂的数据库,不一而足。其功能包括:突出显示语法的 SQL 编辑器、服务器端代码编辑器、SQL/Shell/批处理任务的调度代理,以及对 PostgreSQL 所有功能的支持,适合新手和经验丰富的 PostgreSQL 用户。

最佳实践

确定性能热点:

  • 在开始优化之前,记录基准性能指标。

  • 根据业务需求设定明确的绩效改进目标。

  • 进行基准测试时,禁用详细日志记录,因为这可能影响性能。

  • 设置性能测试套件并定期运行。

  • 使用最新版本的 pgAdmin。(旧版本不支持 EXPLAIN 查询计划。)

  • 对于基准测试,请在优化完成 JProfiler 后分离,因为这会增加延迟。

  • 对于基准测试,请确保在启动模式(而非调试模式)下运行服务器,因为调试模式会增加延迟。

优化策略:

  • application.yaml文件中配置SetMaxResults值,根据您的系统规格指定大小合适的批次。

  • 根据数据量和内存限制配置SetMaxResults值。

  • 更改SetOnGreatorOrEqual为 “SetOnEqual仅在后续调用时” .readNextEqual()

  • 在批量写入或更新操作中,请单独处理最后一个批次,因为它可能小于配置的批次大小,并且可能会被写入或更新操作遗漏。

缓存:

  • processImpl 中引入用于缓存的字段,这些字段会在每次执行时发生变异,应始终在该 processImpl 的上下文中定义。也应使用 doReset()cleanUp() 方法清除这些字段。

  • 实施内存缓存时,请正确调整缓存的大小。存储在内存中的超大缓存会占用所有资源,这可能会影响应用程序的整体性能。

SQLExecution生成器:

  • 对于计划在 SQLExecution Builder 中使用的查询,请使用密钥名称,例如PROGRAMNAME_STATEMENTNUMBER

  • 使用 SQLExecution Builder 时,请务必检查该Sqlcod字段。此字段包含一个值,用于指定查询被正确执行,还是否遇到任何错误。

  • 可使用参数化查询防止 SQL 注入。

业务逻辑优化:

  • 重构代码时保持功能等效性,并对相关程序子集进行回归测试和数据库比较。

  • 保留分析快照以供比较。

操作说明

Task说明所需技能

安装和配置 JProfiler。

  1. JProfiler 下载页面上,下载 JProfiler 适用于您的操作系统(Windows、macOS 或 Linux)的。

  2. 按照 JProfiler 文档中的说明完成安装过程。

  3. 执行初始配置:

    1. 启动 JProfiler 应用程序。

    2. 激活许可证密钥。

    3. 配置默认的 JVM 设置。

  4. 验证安装:

    1. 启动 JProfiler。

    2. 运行测试分析会话。有关说明,请参阅文档的 “分析 JVM” 部分中的 “连接到本地服务”。 JProfiler

应用程序开发人员

安装和配置 pgAdmin。

在此步骤中,您需要安装并配置用于查询数据库的数据库客户端。这种模式使用 PostgreSQL 数据库,并采用 pgAdmin 作为数据库客户端。如果使用的是其他数据库引擎,请依相应数据库客户端的文档操作。

  1. pgAdmin 下载页面下载并安装适用于您的操作系统的 pgAdmin。在安装过程中设置主密码

  2. 连接到数据库服务器。有关说明,请参阅 pgAdmin 文档

  3. 使用 pgAdmin 查询工具运行基本的 SQL 查询,以验证安装情况。

应用程序开发人员
Task说明所需技能

在您的 AWS Blu Age 应用程序中启用 SQL 查询日志记录。

在 Bl AWS u Age 应用程序application.properties的文件中启用 SQL 查询日志记录器,如架构部分所述。

应用程序开发人员

生成和分析查询 EXPLAIN 计划,以确定数据库性能热点。

有关详细信息,请参阅架构一节。

应用程序开发人员

创建 JProfiler 快照以分析执行缓慢的测试用例。

  1. 启动 JProfiler:

    1. 打开 JProfiler 应用程序。

    2. 在起始中心,选择快速连接选项卡。

    3. 从列表中选择 Tomcat 进程。

    4. 选择启动

  2. 配置分析设置:

    1. 选择推荐的采样选项

    2. 保留配置屏幕上的默认选项,然后选择确定

    3. 等待状态栏中显示已连接状态。

  3. 记录性能数据:

    1. 在工具栏上,选择开始记录

    2. 运行测试使用案例并等待其完成。

    3. 选择停止记录

  4. 保存并查看快照:

    1. 选择保存快照

    2. 选择要将快照保存到的位置,然后选择保存

应用程序开发人员

分析 JProfiler 快照以确定性能瓶颈。

按照以下步骤分析 JProfiler 快照。

  1. 打开快照:

    1. 选择文件打开快照

    2. 导航到保存的快照所在的位置。

    3. 选择打开新窗口开始分析。

  2. 分析数据库操作:

    1. 导航到 JDBC/数据库部分,然后选择 JPA/休眠选项卡。

    2. 按时间查看查询(此为默认的排序选项)。

    3. 选择最上面的查询进行优化。

  3. 查看 CPU 使用量:

    1. 在 CPU 部分,选择热点视图。

    2. 确定按时间百分比排在首位的代码进行优化。

    3. 注意反复出现的模式。

  4. 确定热点后,建立基线,然后实施适当的优化策略,如以下操作说明中所述。请重点关注以下优化:

    • 对于慢速查询,请使用 SQLExecution生成器或 DAOManager 优化。

    • 对于频繁的数据访问,实施缓存机制。

    • 对于复杂的业务逻辑,简化逻辑,避免进行过多的数据库调用,并通过运行简单的查询来判断可否简化代码。例如,如果代码将表 A 中的数据插入到表 B,请重写此代码以运行与下方命令类似的 SQL 命令:

      INSERT INTO TABLE A SELECT * FROM TABLE B
  5. 继续按影响程度(从高到低)分析和优化代码,直至应用程序满足您的性能要求。

有关使用的更多信息 JProfiler,请参阅 “架构” 部分和JProfiler 文档

应用程序开发人员
Task说明所需技能

在实施优化之前,应先建立性能基准。

  1. 作为性能评估的第一步,请在不进行任何优化的情况下运行您的测试使用案例。创建当前状态的 JProfiler 快照,并记录以下指标:

    • 总执行时间

    • 数据库调用数

    • CPU 利用率百分比

    • 内存使用模式

  2. 创建文档基线:

    1. 保存所有指标及其时间戳和测试条件。

    2. 注意任何可能影响性能的外部因素。

    3. 存储 JProfiler 快照以便在优化后进行比较。

  3. 规划下一则操作说明中描述的优化变更:

    1. 查看基准指标。

    2. 确定想要优化的操作。

    3. 创建当前代码的备份。

    4. 记录预期改进措施。

  4. 实施之前衡量每项变更:

    1. 使用基准条件运行测试使用案例。

    2. 记录执行时间。

    3. 记录当前行为。

应用程序开发人员
Task说明所需技能

优化读取调用。

使用该 DAOManager SetMaxResults方法优化数据检索。有关此方法的更多信息,请参阅架构部分。

应用程序开发者, DAOManager

重构业务逻辑以避免多次调用数据库。

使用 SQL JOIN 子句减少数据库调用次数。有关详细信息和示例,请参阅架构部分的业务逻辑优化

应用程序开发者、 SQLExecution生成器

重构代码,使用缓存来降低读取调用的延迟。

有关此技巧的更多信息,请参阅架构部分的缓存

应用程序开发人员

重写使用多个 DAOManager 操作进行简单更新操作的低效代码。

有关直接在数据库中更新数据的更多信息,请参阅架构部分的业务逻辑优化

应用程序开发人员
Task说明所需技能

在保持功能等效性的同时,以迭代方式验证每项优化更改。

  1. 实施优化后:

    1. 根据您建立的基准运行同一测试使用案例。

    2. 记录新的执行时间。

    3. 验证结果是否与基准输出相匹配。

  2. 如果优化带来改进,记录实际的收益,然后进行下一次优化。

    如果发现问题,请撤消更改、查看方法,然后尝试其他解决方案。

  3. 跟踪每项更改的进度:

    1. 将新指标与基线指标进行比较。

    2. 计算改进百分比。

    3. 持续记录收益总额。

注意

使用基准指标作为参考,可以确保准确衡量每次优化的影响,同时保持系统可靠性。

应用程序开发人员

问题排查

问题解决方案

当您运行现代应用程序时,会看到带 Query_ID not found 错误的异常。

要解决此问题,请执行以下操作:

  1. 检查应用程序服务器工作目录下 sql 文件夹中是否存在名为 query.sql 的文件。

  2. 验证 .sql 文件名是否与程序名称一致。例如,对于名为 ABC 的程序,文件名应为 ABC.sql

您已添加索引,但未见性能提升。

请执行以下步骤,确保查询引擎正在使用索引:

  1. 如果您使用的是 PostgreSQL,请运行命令 EXPLAIN <sql query>

  2. 检查 Seq ScanIndex Scan 的命令输出。Seq Scan 意味着索引集在 SQL 查询的 where 子句使用的列上不可用。

  3. 在正确的列集上创建索引,并尝试编写使用该索引的查询。

你遇到了一个 out-of-memory例外。

验证代码是否释放了数据结构占用的内存。

批量写入操作会导致表中缺少记录

查看代码,确保在批处理计数不为零时执行额外的写入操作。

SQL 日志记录不会显示在应用程序日志中。

  1. 验证日志记录配置文件的位置和语法。

  2. 确保将指定软件包的日志级别设置为 DEBUG。例如:

    level.com.netfective.bluage.gapwalk.rt.blu4iv.dao: DEBUG level.org.springframework.jdbc.core: DEBUG
  3. 检查应用程序服务器日志文件权限。

  4. 配置更改后,重启应用程序服务器。

相关资源