如果使用空闲插槽,如何在预留/项目之间重新分配预留插槽



关于预订简介:空闲插槽的文档指出,如果需要,其他预订可以使用来自预订的空闲插槽

默认情况下,在保留中运行的查询会自动使用其他保留中的空闲插槽。这意味着只要有容量,作业就可以一直运行。空闲容量可以根据需要立即抢占回原始分配的预留,而与需要资源的查询的优先级无关。这是实时自动发生的。

然而,我想知道在使用空闲时隙但在";拥有";预订

具体地说,我想知道我是否可以将分配的插槽视为保证或视为尽最大努力。

示例:


  • 预留插槽:100
  • 预订A:50个插槽
  • 预订B:50个插槽

";A";在14:00:00开始查询,如果使用了100个插槽,则计算需要300秒。所有插槽在查询开始时都是空闲的,因此所有100个插槽都可供A.使用

5秒后的14:00:05";B";如果使用了50个插槽,则启动一个耗时30秒的查询。

注意

为了简单起见,让我们假设两个查询都只有1个阶段,并且该阶段中的每个计算单元("作业"(占用查询的全部时间。也就是说,这个阶段分为100个作业,如果一个槽开始计算,则需要整整300秒才能成功完成。

我相当确信,在";多个阶段";或";计算时间更短";(例如,如果计算可以分解为1000个作业(GBQ将足够聪明,可以动态地重新分配其所属预留的空闲时隙。


问题:

  • 做";B";现在必须等待;A";完成?
    • 这意味着大约5分钟的等待时间
      • 我不确定如何"现实主义;5分钟是,但我觉得这是一个重要的变量,因为我不会担心几秒钟,但我会担心几分钟
  • 或者可能是已经开始的";A";也在飞行途中遇难?
    • docu预订简介:空位安排似乎暗示了这样的东西

      调度程序的目标是在过于激进地驱逐正在运行的任务(这会浪费槽时间(和过于宽容(这会导致长时间运行任务的作业获得不成比例的槽时间份额(之间找到一种媒介。

通过Reddit 回答

一个阶段可能会运行很长一段时间(在非常糟糕的情况下,几分钟甚至几个小时(,但一个阶段由许多工人运行。大多数工人在很短的时间内完成工作,例如几毫秒或几秒钟。因此,重新平衡,即将职位从一个职位重新分配到另一个职位是非常快的。

因此,如果再平衡发生,一份工作失去了很大一部分时间,那么它的运行速度就会慢得多。获得空位的那一个会跑得很快。这种变化很快。

所以在上面的例子中。当作业B在5秒内开始时,在一秒钟左右的时间内,它将获得大部分插槽。

所以底线:

  • 一个查询被分解为";很多";工作单位的
  • 每项工作完成得都很快
  • 这使GBQ有机会重新分配插槽

最新更新