你当前正在访问 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 工具扩展。 如果你尚未安装此扩展,请按照此指南安装。
  • 为流分析作业配置实时输入和实时输出。
  • 必须在查询中包含实时输入和输出。

注意

作业模拟无法模拟本地输入和输出的作业运行拓扑。 在模拟期间,不会向输出目标发送任何数据。

  1. 在 VS Code 中打开 ASA 项目。 转到查询文件“*.asaql”,然后选择“模拟作业”以启动作业模拟。

    在 VS Code 上的查询文件中打开作业关系图模拟器的屏幕截图。

  2. “关系图”选项卡下显示了分配到作业的流节点数,以及每个流节点中的分区数。 以下屏幕截图是数据在节点之间流动的非并行作业示例。

    在 VS Code 中使用作业关系图模拟器的屏幕截图,其中显示了作业拓扑。

  3. 由于此查询“不是”并行的,因此你可以选择“增强”选项卡来查看有关改进查询的建议。

    在 VS Code 中使用作业关系图模拟器的屏幕截图,其中显示了查询编辑建议。

  4. 在增强列表中选择查询步骤,然后你会看到相应的行已突出显示,可以根据建议编辑查询。

    在 VS Code 中使用作业关系图模拟器的屏幕截图,其中突出显示了查询步骤。

    注意

    这是一些有关提高查询并行度的编辑建议。 但是,如果你在所有分区之间使用聚合函数,则并行查询可能不适用于你的情况。

  5. 在此示例中,你将 PartitionId 添加到第 22 行并保存更改。 然后,你可以使用“刷新模拟”来获取新的关系图。

    显示更新查询后刷新关系图的屏幕截图。

  6. 还可调整“流单元”,来模拟如何为流节点分配不同的 SU。 此操作可让你大致了解需要分配多少 SU 才能处理工作负载。

    在 VS Code 中使用 SU 调整器的屏幕截图。

在 Azure 门户中使用作业模拟

  1. 转到 Azure 门户中的查询编辑器,然后在底部窗格中选择“作业模拟”。 它根据查询和预定义的流单元模拟作业运行拓扑。 显示在门户中打开作业模拟的屏幕截图。
  2. 选择“增强”来查看有关改进查询并行度的建议。 显示在门户中打开作业模拟增强的屏幕截图。
  3. 调整流单元来查看处理工作负载所需的 SU 数。 显示如何在门户中调整 su 的屏幕截图。

处理器级关系图

调整流单元以模拟作业的拓扑后,可以扩展任何流节点,以观察在处理器级别处理数据的方式。

GIF 格式的屏幕截图,其中显示了模拟器的处理器级别关系图。

处理器级关系图允许你:

  • 观察在每个流式处理节点上输入分区的分配和处理方式。
  • 了解每个计算处理器的时间移位
  • 提供有关输入和输出处理器是否并行对齐的信息。

若要使处理器对应查询步骤,请双击以选择关系图。 此功能有助于找到执行聚合的查询步骤。

显示 VS Code 中作业模拟映射功能的屏幕截图。

增强建议

下面是“增强”的解释:

类型 含义
自定义分区不受支持 将输入“xxx”分区键更改为“xxx”。
分区数不匹配 输入和输出的分区数必须相同。
分区键不匹配 输入、输出和每个查询步骤必须使用相同的分区键。
输入分区数不匹配 所有输入的分区数必须相同。
输入分区键不匹配 所有输入必须使用相同的分区键。
兼容性级别低 在 JobConfig.json 文件中升级 CompatibilityLevel。
找不到输出分区键 需要为输出使用指定的分区键。
自定义分区不受支持 只能使用预定义的分区键。
查询步骤未使用分区 查询未使用任何 PARTITION BY 子句。

后续步骤

若要详细了解查询并行化和作业关系图,请查看以下教程: