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