U-SQL工作绩效

U-SQL job performance

你能帮我看看工作表现吗?我用 10 个 AU 运行它。在开始的时候,它们几乎全部被使用。但是从执行时间的后半部分开始,它只使用了 1 个 AU。我在计划中看到一个超级顶点只由一个顶点组成,它看起来像低估了执行计划(这只是假设)。

我正在尝试分析执行时间,但如果没有像 HashCombine、HashCross 等操作的技术描述,这很难……

所以我的问题是我可以用它做点什么(修改代码、添加提示等)吗?

my job ID link

问题已通过 Mychael Rys 的解决方案解决。

我应用了 Michael Rys 的解决方案,效果非常好。一如既往地谢谢你!见下图。现在几乎所有10AU的10AU都用上了。我还玩了建模工具,看起来脚本的缩放比例接近于线性。太棒了:).

多一个解决方案

我也可以用左连接替换内部连接(替换在我的情况下是等效的,因为在维度 tables 中,事实 table dim- 中的任何记录总是只存在一行1:M-事实)。 CBO 将 join 的结果基数估计为“至少不小于事实 table”。如果 CBO 在没有提示的情况下生成好的计划。

我会将您的工作 link 转发给我们的一位开发人员,他们可以查看并在我获得更多信息后更新此答案。

不过,对于 Whosebug 的帮助,查看脚本 and/or 作业图也会很有帮助。例如,您要处理多少数据?您是否正在使用暗示排序或分组等的操作

从vertex execution来看,好像是从很多小文件中提取出来的,每个文件只包含少量数据。很可能是优化器假定只有少量数据来自这些文件。

您可以向 EXTRACT 语句添加 OPTION(ROWCOUNT= xxx) 提示以提示更多行(xxx 将是强制系统并行化的数字),假设我初步假设是正确的。

查看作业后的一些附加信息

该计划是一个 13 路连接,具有 12 个维度 table 和 1 个事实 table。错误(低估导致串行计划)在 12 个连接中的 9 个完成后开始。最后 3 个连接——dim_application、dim_operation 和 dim_data_type 是连续完成的。该计划的主干仍有 29GB。我们很难通过9个j​​oin来估计,因为我们没有外键信息。

您最有可能完成这项工作的是

  1. 将连接语句拆分为 2 个,在第二个中连接 dim_application、dim_operation 和 dim_data_type。
  2. 在第一个大数连接语句的输出上添加 ROWCOUNT 提示。

如果有帮助请告诉我。