手动将查询移至不同的资源池

数据库管理员可以使用 MOVE_STATEMENT_TO_RESOURCE_POOL 元函数将查询移至另一个执行当中的资源池。

如果某一个查询正在使用大量资源,您可能希望利用这一功能,以防止执行较小的查询。

当查询移至另一个资源池时会发生什么情况

将查询从一个资源池移至另一个资源池时,如果目标池具有足以容纳传入查询的资源,该查询便会继续执行。如果在目标池中无法至少在一个节点上分配足够的资源,则 Vertica 会取消该查询并尝试重新计划查询。如果 Vertica 无法重新计划查询,则该查询将被无限期地取消。

当您成功将查询移至目标资源池后,该查询的资源将由目标池提供,而在第一个池中占用的资源将被释放。

如果将查询移至具有 PRIORITY HOLD 的资源池,Vertica 会取消该查询并将其排入目标池的队列中。在您更改 PRIORITY 或将查询移至另一个没有 PRIORITY HOLD 的资源池之前,该取消状态将一直有效。如果要存储长时间运行的查询以便日后使用,可使用此选项。

若要确定目标池能否容纳要移动的查询,可查看 RESOURCE_ACQUISITIONSRESOURCE_POOL_STATUS 系统表。请注意,当您查询系统表时以及调用 MOVE_STATEMENT_TO_RESOURCE_POOL 元函数时,这些表可能发生变化。

当查询从一个资源池成功移至另一个执行当中的资源池时,该查询会一直执行,直至达到现有 RUNTIMECAP 和新 RUNTIMECAP 之间的较大者为止。例如,如果初始池的 RUNTIMECAP 大于目标池,则查询可在达到初始 RUNTIMECAP 之前一直执行。 当查询从一个资源池成功移至另一个执行当中的资源池时,CPU 关联性将改变。

使用 MOVE_STATEMENT_TO_RESOURCE_POOL 函数

若要手动将查询从其当前资源池移至另一资源池,请使用 MOVE_STATEMENT_TO_RESOURCE_POOL 元函数。如下所示提供会话 ID、事务 ID、语句 ID 和目标资源池名称:

=> SELECT MOVE_STATEMENT_TO_RESOURCE_POOL ('v_vmart_node0001.example.-31427:0x82fbm', 45035996273711993, 1, 'my_target_pool');

另请参阅: