1

我已经阅读了 Foundry 中的文档以了解两者之间的区别,但我想知道在什么情况下我希望将STATIC_ALLOCATION配置文件应用于我的构建以防止我的执行程序被抢占。

在动态分配模式下运行时,我还有什么其他需要注意的吗?

4

1 回答 1

1

在动态分配中运行时应注意以下几点:

  1. 当你的执行器被抢占时,可以重新启动昂贵的任务,导致性能不佳
    • 如果你知道你会有昂贵的任务,你可以考虑将STATIC_ALLOCATION配置文件应用到你的构建中,这样你就不会被抢占。请注意不要请求比构建所需更多的执行器,因为没有其他人将能够共享资源。
  2. AQE可能会错误地估计昂贵的任务,从而在被抢占时导致更糟糕的行为
    • 如果您知道您将执行昂贵的任务,您可以考虑将ADAPTIVE_DISABLED配置文件应用到您的构建中,这样 AQE 就不会得到它对分区大小的估计错误,从而导致并行性差。AQE 非常适合用于类似 SQL 的操作,例如joinwindow和其他类似的东西,但是当您使用.udfAQE 无法准确估计其费用的其他特定行为时,它最终可能会在实践中伤害您。
    • 如果您最终禁用 AQE,您将只想在严格需要的构建中这样做,即多次使用.udf或其他手动行为。它将帮助您在所有其他构建中保留它。
    • 当您禁用 AQE 时,您还需要确保手动调整昂贵阶段的分区大小,即在最坏的情况下,您将输入中的行数计入 a.udfrepartition()计入此行数,导致每个任务 1 行. 这是可能支付的最大 I/O 成本,但它会导致尽可能少的任务和最大的并行度
于 2021-12-16T15:34:37.730 回答