1

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

4

4 回答 4

1

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

于 2016-07-20T02:57:23.083 回答
0

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

于 2016-07-20T08:15:30.107 回答
0

是的,休伯特是对的。当 Query dispatcher 需要 Resource Manager 的资源(简称 RM)时,会识别 min_segment_count(简称 N1)和 max_segment_count(简称 N2),这意味着如果 RM 有足够的 N2 个可用虚拟段,它可以返回 N2 个虚拟段。但是如果 RM 没有 N2 个可用的虚拟段,但有 >= N1 个可用的段,它可以返回可用的虚拟段。如果其可用段数小于 N1,则请求将挂起。

短期内,request(N1,N2),RM判断可用虚拟段数N

{

如果 N >= N2 返回 N2;

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

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

}

于 2016-07-20T03:05:39.973 回答
0

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

于 2016-07-20T02:46:24.213 回答