提高Azure 流分析(ASA)作业性能的一种方法是在查询中应用并行度。 本文演示如何使用Azure门户中的作业模拟和Visual Studio Code(VS Code)来评估流分析作业的查询并行度。 了解如何使用不同数量的流式处理单元可视化查询执行,并基于编辑建议改进查询并行度。
什么是并行查询?
查询并行度通过创建多个进程(或流节点)并并行执行查询来划分查询的工作负荷。 它大大减少了查询的总体执行时间,因此需要更少的流式处理时间。
若要使作业并行,必须对齐所有输入、输出和查询步骤,并使用相同的分区键。 查询逻辑分区由用于聚合的键(GROUP BY)确定。
若要详细了解查询并行化,请参阅在 Azure 流分析中利用查询并行化。
在 VS Code 中使用作业模拟
作业模拟功能模拟作业如何在Azure中运行拓扑。 在本教程中,你将了解如何根据编辑建议提高查询性能,并使其并行执行。 例如,我们使用一个非并行作业,从一个事件中心获取输入数据,并将结果发送到另一个事件中心。
Prerequisites:
- VS Code 的 ASA 工具扩展。 如果尚未安装,请按照 本指南 进行安装。
- 为流分析作业配置实时输入和实时输出。
- 必须在查询中包含实时输入和输出。
注释
作业模拟无法针对本地输入和输出模拟作业运行拓扑。 在模拟期间,不会向输出目标发送任何数据。
在 VS Code 中打开 ASA 项目。 转到查询文件 *.asaql ,然后选择 “模拟作业 ”以启动作业模拟。
在“ 关系图 ”选项卡下,它显示分配给作业的流节点数以及每个流式处理节点中的分区数。 以下截图展示了一个非并行作业的示例,其中数据在节点之间流动。
由于此查询 不是 并行的,因此可以选择“ 增强功能 ”选项卡以查看有关改进查询的建议。
在增强功能列表中选择查询步骤,将突出显示相应的行,可以根据建议编辑查询。
注释
这些是用于改进查询并行度的编辑建议。 但是,如果在所有分区中使用聚合函数,则并行查询可能不适用于你的方案。
在本示例中,将 PartitionId 添加到 line#22 并保存更改。 然后,可以使用 刷新模拟 来获取新关系图。
还可以调整 流式处理单元,以模拟在不同 SU 下流式处理节点的分配方式。 它让你了解需要多少 SU 来处理工作负荷。
在 Azure 门户中使用作业模拟
- 转到Azure门户中的查询编辑器,然后在底部窗格中选择“作业模拟”。 它根据您的查询和预定义的流单元模拟作业运行拓扑。
- 选择“增强功能”以查看改进查询并行度的建议。
- 调整流式处理单元以查看处理工作负荷所需的 SU 数。
处理器级关系图
在您调整流式处理单元以模拟您的作业拓扑之后,可以展开任何流式处理节点,查看您的数据在处理器级别的处理情况。
处理器级关系图允许你:
- 观察如何在每个流式处理节点上分配和处理输入分区。
- 了解每个计算处理器的时间偏移。
- 提供有关输入和输出处理器是否并行对齐的信息。
若要将处理器映射到查询步骤,请在图表中双击。 此功能可帮助你查找执行聚合的查询步骤。
改进建议
下面是增强功能的说明:
| Type | 含义 |
|---|---|
| 不支持自定义分区 | 将输入的“xxx”分区键更改为“xxx”。 |
| 不匹配的分区数 | 输入和输出必须具有相同数量的分区。 |
| 分区键不匹配 | 输入、输出和每个查询步骤都必须使用相同的分区键。 |
| 不匹配的输入分区数 | 所有输入必须具有相同数量的分区。 |
| 输入分区键不匹配 | 所有输入都必须使用相同的分区键。 |
| 低兼容性级别 | 升级 JobConfig.json 文件中的 CompatibilityLevel。 |
| 找不到输出分区键 | 需要为输出使用指定的分区键。 |
| 不支持自定义分区 | 只能使用预定义的分区键。 |
| 查询步骤未使用分区 | 你的查询未使用任何 PARTITION BY 子句。 |
后续步骤
若要详细了解查询并行化和作业关系图,请查看以下教程: