查询优化原则
创建不好的查询可能导致性能问题。 您可以将一些最佳做法应用到查询,以避免产生不必要的影响,包括:
- 所有查询应仅提取所需的数据 - 您的查询应从定义的字段列表中提取。 例如,如果您需要拉取客户的客户编号,应该将查询限制为仅提取客户编号字段。 提取不必要的字段将降低性能。
- 避免嵌套查询 - 嵌套查询是查询内的查询。 例如,如果您创建一个查询来提取客户表,然后基于第一个查询创建第二个查询来提取销售表,则会出现嵌套查询。 相反,使用联接将两个表链接到一个查询中。
您可以通过选择查询进行的四种联接类型包括:
- 联接 - 提取两个表上匹配的记录,例如内部联接。
- 外部联接 - 无论这些记录在两个表上是否匹配,都会提取记录。
- 存在联接 - 从第一个表中提取与第二个表中的记录匹配的所有记录。 不返回第二个表中的任何记录。
- 不存在联接 - 从第一个表中提取与第二个表中的记录不匹配的所有记录。 不返回第二个表中的任何记录。
使用适当的联接,可通过减少提取的不需要的记录和字段数来提高性能。
在大型表和快速增长表(例如库存交易表)上,应在查询中使用索引 和索引提示 来对数据进行排序。 关键字索引 指示系统查找用于对数据进行排序的最佳索引。 索引提示 建议一个索引。
维护诊断验证规则
某些工具可以帮助您确定区域以优化性能。 您可以在财务和运营应用中的优化顾问工作区中看到上次性能检查的消息列表,其中包含获得更好性能的可能机会。
您可以从系统管理 > 定期任务 > 维护诊断验证规则和系统管理 > 定期任务 > 计划诊断验证规则中维护性能检查的规则和频率。
Dynamics 365 Lifecycle Services 提供工具来帮助您监视性能。 要访问这些工具,请转到云托管的环境页面并选择完整详细信息链接。
优化工具
财务和运营应用可以使用各种不同的工具来监视和诊断性能问题,包括:
- Trace Parser 包括长时间运行的 X++ 方法、耗时的 SQL 查询或客户端服务器调用。
- Performance SDK,用于性能负载测试。
- Lifecycle Services 中的 SQL Insights,包括特定环境的性能指标、索引分析、实时视图、查询和操作。
- SQL 跟踪,使用第 1 层环境中的 SQL profiler。
- 监视 Lifecycle Services 中的服务器运行状况指标,用于 AOS、批处理框架、数据导入/导出框架、Microsoft Azure SQL 和 Management Reporter 的运行状况检查。
优化数据迁移
数据迁移几乎是所有实现的关键成功因素。 数据迁移时长是客户关心的一项主要内容,取决于要迁移的数据数量。 并非所有数据实体都针对迁移和迁移可能包含的数据量进行了优化。
您可以对数据管理框架执行特定配置,提高数据迁移场景中的性能,包括:
- 关闭更改跟踪 - 执行增量数据导出并减慢迁移流程时,更改跟踪功能非常有用。 关闭更改跟踪有助于提高性能。
- 打开基于集的处理 - 数据实体页面上基于集的处理字段通常处于关闭状态。 基于集的处理意味着对数据库进行批量操作,而不是对单个记录进行操作。 基于集的处理功能还可以在数据实体的顶部节点设置,具体是将启用基于集的 SQL 操作和支持基于集的 SQL 操作属性设为开。
- 创建数据迁移批处理组 - 应在系统上发生少量或没有任何其他活动时执行迁移。 然后在批处理组中运行作业,这种做法非常有效。
- 启用基于优先级的批处理计划 - 优化批处理作业的运行方式,它可以使用预留容量。
- 设置最大批处理线程数 - 服务器配置上的默认最大批处理数量为 8。 但是,您可以增加到 12 或 16 个线程。 建议在未进行全面性能测试以确定潜在系统影响之前,不要将线程数量设置为高于 16。
- 在批处理模式下导入 - 使用此配置利用优化配置而不是单个线程。
- 清除暂存表 - 建议您清除暂存表。 有关详细信息,请参阅清除暂存表。
- 更新统计信息 - 更新关联表的统计信息非常有用,您可以使用 Lifecycle Services 来完成此操作。
- 实体执行参数 - 在实体设置页面上的数据导入/导出框架参数中,您可以选择配置实体执行参数。 此外,还可以利用导入阈值记录计数和导入任务计数字段进行优化。
- 验证 - 通过插入和更新进行迁移业务验证和业务逻辑可以关闭此功能,这意味着
validateWrite()不会运行验证并且表不会运行insert()和update()。 另外,您还可以关闭字段级别的验证。
优化数据迁移的一般建议包括:
- 将文件分成更小的块。
- 在恰当的第 2 层或更高的环境中进行性能测试。
- 上线前通过模拟直接转换测试性能。
应在测试迁移性能时记下笔记,方便收集有关如何设置实体、批处理、参数和其他项的信息。