如果HAWQ资源管理器无法获取足够的资源,该如何处理



正如我们所知,如果查询要求资源管理器获取资源,但无法获得足够的资源(低于vsegs的最小数量),它仍然会在下一轮中请求资源。例如,如果一个查询第一次询问1000个vseg,但只得到20个vseg。由于查询可以运行的vsegs的最小数量是100,它下次会询问80个vsegs并始终保留20个vsegs?

否,HAWQ中的会话不会保留资源。当没有足够的vsegs时,查询将挂起等待资源到达,超时后,查询将失败。

我猜hawq将保留20个资源槽,并继续请求80个资源槽。但这会导致饥饿。资源管理器应该能够检测到这一点。

是的,休伯特是对的。当查询调度程序从资源管理器(简称RM)请求资源时,它会识别min_segment_count(简称N1)和max_segment_coount(简称N2),这意味着如果RM有足够的N2个可用虚拟段,它可以返回N2个虚拟段。但是,如果RM没有N2个可用虚拟段,但有>=N1个可用段,它可以返回可用虚拟段。如果其可用段号小于N1,则该请求将挂起。

在短期内,请求(N1、N2),RM判断可用虚拟段编号N

如果N>=N2,则返回N2;

否则,如果N>=N1,则返回N1;

否则就挂起,直到有足够的资源。

}

但如果query1和query2在不同的资源队列中,则由资源队列的比例决定。

最新更新