适用于此 Power Platform Well-Architected Performance Efficiency 清单建议:
| PE:08 | 优化数据性能。 针对数据存储在工作负载中的预期和实际用途进行优化。 |
|---|
本指南介绍优化数据性能的建议。 优化数据性能就是优化工作负荷处理和存储数据的效率。 每个工作负载操作、事务或计算通常都依赖于快速准确的数据检索、处理和存储。 在优化数据性能后,工作负荷会平稳运行。 数据性能受损会造成性能效率低下的多米诺骨牌效应。 未能优化数据性能会导致响应延迟、延迟增加和可扩展性降低。 这会危及整个工作负载的效率。
定义
| 术语 | 定义 |
|---|---|
| 数据存储 | 一种资源,用于存储数据库、对象存储或文件共享。 |
| Index | 提供对项目的快速访问的数据库结构。 |
| 联机分析处理 (OLAP) | 一种组织大型业务数据库、支持复杂分析并执行复杂分析查询而不会对事务系统产生负面影响的技术。 |
| 联机事务处理 (OLTP) | 一种在组织的日常运营中记录业务交互的技术。 |
| 分区 | 将数据物理划分为单独的数据存储的过程。 |
| 查询优化 | 优化数据库查询速度的过程。 |
关键设计策略
若要优化数据使用,请确保针对其预期用途和在工作负载中的实际用途对数据存储进行了优化。 优化数据使用可以改进查询性能、减少资源消耗并提高系统效率。 可考虑采取以下策略:
配置文件数据。 了解数据并确保数据模型非常适合您的工作负荷。 考虑数据规范化和分区技术等因素。 为了高效检索数据,请确保选择适当的数据类型并定义表之间的关系。
优化查询性能。 分析和优化工作负荷中运行的查询。 使用诸如查询优化和缓存等技术。 使用服务器端视图预筛选数据。 要识别瓶颈,请使用性能监控工具,然后进行必要的改进。
定期监视和优化系统。 持续监控工作负载的性能,迭代数据存储配置和查询优化。 根据性能优化最佳实践,分析系统度量,确定改进区域以及实施更改。 随着数据的增长,您可能需要更新查询以保持高性能。
配置文件数据
数据分析包括检查来自数据源的数据并收集相关信息。 该目标是了解工作负荷数据的质量、结构和特征。 此过程允许识别缺失值、重复、格式不一致和其他异常等问题。
为进行有效的数据探查,请考虑以下策略:
了解数据结构。 检查数据的结构,包括表、列和关系。 确定应用于各列的数据类型、长度和约束。 数据结构评估帮助您了解数据的组织方式以及数据与其他数据元素之间的关联方式。
分析数据量。 评估数据量,以了解总体规模和增长模式。 确定记录或文档的数量以及各个表或集合的大小。 此信息可帮助您评估存储要求和确定扩展性问题。
确定数据关系。 探索数据元素之间的关系。 了解数据的连接方式,以便确定一个表或文档中的更改可能会如何影响相关数据。
评估数据质量。 通过检查完整性、准确性、一致性和唯一性等因素来评估数据质量。 识别可能影响数据完整性和查询性能的数据异常、缺失值或重复记录。 该步骤帮助您确定数据清理和改进的方面。
捕获数据分布。 分析每列中值的分布以确定数据模式。 识别常见值和罕见值、异常值和数据偏斜。 若要优化查询性能,请分析是否适合使用备用键来提高性能。
监控数据性能
通过数据性能监视,可以一致地跟踪数据存储的效率。 它涉及使用为系统级别、数据库特定的或第三方监视解决方案定制的工具,来收集和分析特定于数据操作的性能指标。 有效的数据性能监控使您能够主动识别和缓解潜在的瓶颈,确保与数据相关的流程和任务高效。
若要监视数据性能,请考虑以下策略:
收集特定于数据的度量。 收集与数据绩效直接相关的关键指标。 这些指标包括查询响应时间和数据吞吐量。
设置数据警报。 专门针对数据指标设置警报。 这些指标中使用预定义的阈值或异常来触发警报。 警报使您能够在性能指标超过可接受范围或显示异常行为时接收通知;例如,如果数据库查询花费的时间比预期的要长,或者数据吞吐量显著下降。 您可以使用专用监视工具或自定义脚本设置这些警报。
诊断数据性能问题。 定期查看收集的数据指标,以识别数据操作中潜在的性能瓶颈或降级。 在此过程中,可视化工具或仪表板非常宝贵,有助于突出数据性能的趋势、瓶颈和异常值。 确定后,调查这些问题的根本原因并计划适当的修正步骤。
分区数据
分区涉及将大型数据集或大量工作负载划分为较小的、可管理的子集。 分区通过分配工作负载和改进并行处理来提高数据性能效率。 它还可以确保根据特定需要和查询模式提高数据访问效率。 您可以垂直或水平对数据进行分区(也称为分片)。 例如,如果使用 Dataverse 弹性表,请考虑分区键应该是什么。
| 策略 | 定义 | 示例 | 使用案例 |
|---|---|---|---|
| 垂直分区 | 通过为每个分区选择特定的列或字段,将表划分为较小的表。 每个分区都表示完整数据的一部分。 | 如果有一个包含 A、B、C 和 D 列的表,则可以创建一个包含 A 列和 B 列的表,以及另一个包含 C 列和 D 列的表。 | - 一个表包含许多列,但查询不会同时访问所有列。 - 有些列大于其他列,而分隔列可以提升 I/O 性能。 - 不同的数据部分具有不同的访问模式。 |
| 水平分区 | 基于值的行或范围拆分数据(也称为分片)。 每个分区包含具有相似特性的行的子集。 | 如果表的行数为 1 到 1000,则可以创建一个包含第 1 行到第 500 行的分区和另一个包含行 501 到 1000 的分区。 | - 数据集对于单个位置或服务器来说太大。 - 根据特定范围或筛选器访问数据。 - 需要跨物理节点或服务器分发工作负荷,以提高性能。 |
若要将数据分区,请考虑以下步骤:
分析数据和查询。 分析数据和查询模式,以确定合适的分区或分片策略。 了解数据的特性、访问模式和分发要求。
确定键。 选择分区或分片键,以便在分区或分片之间分发数据。 根据数据特征和查询要求仔细选择键。
确定逻辑。 基于选择的键确定分区或分片逻辑。 请考虑将数据划分为多个区域、应用哈希算法或使用其他分区技术。
优化查询
优化查询可以细化查询,从而减少符合条件的数据和返回的数据。 这些调整增加了检索数据的效率和速度。 因此,数据库的工作量更轻,资源工作效率更高,用户交互更顺畅。
若要优化数据库查询,请考虑以下策略:
重写查询。 审查和分析复杂的查询,以确定重写它们的机会。 请考虑重新构建查询逻辑、消除冗余操作或简化查询语法。
避免 N+1 查询问题。 使用联接和批量提取来有效地检索相关数据,最大限度地减少到数据库的往返次数。
对联接重新排序。 评估并考虑排列联接顺序,以尽可能减少每个联接操作中的行数。 联接表的顺序会影响查询性能。
缓存查询。 存储经常运行查询的结果,以便轻松重复使用。 查询缓存消除了重复运行同一查询的需要,并减少了查询处理开销。
监控和调整。 监视查询绩效指标,例如运行时、资源利用率和查询吞吐量。 使用数据库分析工具和监控功能来识别性能不佳的查询。 使用该信息优化查询性能。
存档并清除数据
存档和清除是一种简化数据存储的策略。 存档将较旧的、不常访问的数据重新定位到更经济高效的存储中。 清除数据将永久移除冗余数据。 这两种方法都通过减少数据量、提高数据访问速度以及减少备份和恢复时间来提高性能效率。
- 减少数据量:更少的数据意味着更快的处理时间,确保快速响应用户请求。
- 提高数据访问速度:修剪后的数据集可以更快地查询和数据检索,从而优化系统响应能力。
- 减少备份和恢复时间:较小的数据集可加快备份和恢复过程,最大限度地减少停机时间并确保一致的性能。
存档和清除有助于在数据驱动系统中保持最佳性能效率。
优化存储负载
优化存储负载意味着可以简化对存储空间系统的请求。 它有助于消除不必要的请求,增强数据检索,并避免存储系统不堪重负。 优化存储负载可确保存储系统保持对合法请求的响应并保持最佳性能。 实施策略以减轻数据存储的处理负担。 要优化数据存储负载,请考虑以下策略。
使用缓存
缓存将常见访问的数据存储在访问快速存储区域,使数据检索速度比从主源拉出数据更快。 此技术通过减少访问时间并避免重复获取数据而提高数据性能。 存可提高读取速度和用户响应时间,尤其是对于经常访问的数据。 此方法对静态数据或很少发生更改的数据最有效。
若要确保最佳缓存效率,请考虑过期策略、逐出策略和缓存大小管理等因素。 调整设置,如生存时间 (TTL),以获得最佳性能。 若要使用缓存优化存储负载,请考虑以下策略:
内存缓存:执行内存缓存,将经常访问的数据存储在内存中,以便快速检索。 可以将此技术用于计算或从数据库中检索成本高昂的应用程序数据。 内存中缓存对于您经常读取但不会频繁更改的数据很有用。 例如,可以使用云端流中的变量或画布应用中的集合来缓存数据。
数据库查询缓存:使用这种技术来缓存数据库查询的结果,以避免多次运行相同的查询。 数据库查询缓存可用于复杂且耗时的数据库查询。 缓存查询结果时,会快速返回对同一查询的后续请求。 此外,请考虑使用服务器端视图(如果可能)预筛选数据以缩小与查询相关的数据范围。
内容分发网络缓存:使用此技术在分布式网络服务器上缓存 Web 内容,以减少延迟并改进内容交付。 内容传送网络缓存对静态内容(如图像、CSS 文件和 JavaScript 文件)有效。 内容分发网络将内容副本存储在全球多个位置,因此用户可以从地理位置上靠近他们的服务器访问内容。
优化数据更新
优化数据更新涉及评估为确保其性能而执行的数据更新。 更新对性能的影响比其他操作更大,因为它们可能会触发不必要的工作并导致锁定冲突。
若要评估如何优化数据更新,请考虑:
数据变化。 优化自动化,以使用数据或过滤器的预映像,以在未发生实际更改时最大程度地减少工作。 避免对未修改的数据触发自动化。
自动化。 根据数据更改评估触发更新的时间和方式,并优化触发器以包含筛选器。 例如,仅当修改数据源中的特定字段时才触发自动化。 评估以增量方式多次触发自动化的更新。 相反,请考虑是否可以创建自定义操作来处理所有处理。 例如,如果订单发货,并且发货日期和跟踪号是单独更新的,则它们可以在自定义的“ShipOrder”操作中同时更新。
死锁。 评估由于多个流以不同顺序更新相同数据而可能导致问题的缓慢更新操作。 此浪费会导致锁定冲突甚至潜在死锁,导致不必要的返工。 按同一顺序更新不同资源以尽可能减少竞争。
批量更新。 如果对表的多行运行操作,请考虑使用批量操作。
优化数据移动和处理
优化数据移动和处理涉及提高与数据提取、转换、加载和处理相关的操作的效率和性能。 考虑优化数据移动和处理的以下关键方面:
提取、转换和加载(ETL)优化:优化 ETL 流程以最大限度地减少处理时间。 您可以简化提取过程、实施有效的转换算法并优化加载过程。 通过提高每个步骤效率,可以优化整个工作流。
并行处理:使用并行处理技术来提高性能。 当您将数据处理任务分布在多个线程或节点上时,您可以同时划分和处理工作负载,从而实现快速处理。
批处理:将相似的任务组合在一起,以减少重复作带来的开销。 一次处理多个任务,以缩短总体处理时间。
数据邻近性设计
数据邻近性是指将数据战略性地放置在更靠近最常访问数据的用户或服务的位置。 减少数据及其用户之间的物理或逻辑距离可以确保更快地访问数据并提高响应能力。 要优化近距离设计,请考虑以下策略:
评估数据访问模式:评估工作负载的访问模式和经常访问的数据。 此分析可帮助确定数据放置位置以便获得最大收益。
选择支持数据重定位的解决方案:考虑根据不断变化的访问模式提供动态数据重定位的解决方案,确保最佳的数据定位。
选择支持数据同步的解决方案:如果要为分布式用户群提供服务,请选择支持跨各个区域的数据同步的解决方案,以确保数据副本在用户附近可用。
权衡:如果底层数据频繁更改,则实施缓存失效机制以确保缓存数据保持最新状态。
Power Platform 便利化
监视数据性能:若要监视数据性能,请考虑使用 Azure Monitor 来 收集和分析基础结构指标、日志和应用程序数据。 您可以将 Monitor 与其他服务集成,如 Application Insights。 Application Insights 提供应用程序性能监视并支持许多平台。
Application Insights 收集使用情况和性能数据。 您可以使用日志分析将该数据与 Azure 资源的配置和性能数据相关联。 Application Insights for Dataverse 数据流当前提供与 Dataverse API 传入调用、Dataverse 插件执行调用和 Dataverse SDK 调用相关的性能数据。
优化画布应用中的查询数据模式: 按照记录的指南和建议进行作。 请参阅 中的优化查询数据模式 Power Apps。
优化自定义、扩展或集成 Dataverse的方式: 遵循记录的最佳实践和指南。 请参阅使用 Microsoft Dataverse 时的最佳实践和指南。
优化数据库查询和索引性能:使用 Azure SQL 数据库的查询性能见解功能来优化查询、表和数据库。 您还可以使用此功能来识别和解决查询性能问题。
对于关系数据库,请遵循索引设计指南、SQL Server 索引指南和 Azure Cosmos DB 索引指南。 使用 SQL 数据库对 查询执行自动优化 ,以提高性能。
对于 SQL 数据库,您应定期 重新组织或重新构建索引。 识别速度慢的查询,并对其进行调优以提高性能。 许多数据库引擎具有查询优化功能。 有关详细信息,请参阅 查询性能的最佳实践。
Azure Cosmos DB 具有默认索引策略,可为每个项的每个属性编制索引,并强制执行任何字符串或数字的范围索引。 该策略可以提高查询性能,不必提前管理索引。
优化存储负载:许多 Azure 数据库服务都支持只读副本。 读副本的可用性和配置因 Azure 数据库服务而异。 请参阅每项服务的官方文档,了解详细信息和选项。
相关信息
- 创建高性能 Power Apps 概述
- 为应用程序选择 Azure 数据存储
- Power Automate 通过添加条件自定义流触发器
- Dataverse 弹性表
- 将 SQL Server 与画布应用配合使用
- 将 Dataverse 作为画布应用的数据源
性能效率清单
请参考整套建议。