查询预算

在执行查询之前,Vertica 会设计一个查询计划,并将其发送到将参与执行查询的每个节点。资源管理器评估每个节点上的计划,并估算节点执行其查询部分需要的内存量和并发程度。这是查询预算,Vertica 将其存储在系统表 V_MONITOR.RESOURCE_POOL_STATUSquery_budget_kb 列中。

查询预算基于查询将执行的资源池的几个参数设置:

  • MEMORYSIZE

  • MAXMEMORYSIZE

  • PLANNEDCONCURRENCY

您可以使用 ALTER RESOURCE POOL 修改 GENERAL 资源池的 MAXMEMORYSIZEPLANNEDCONCURRENCY。此资源池通常执行未分配给用户定义资源池的查询。您可以在使用 CREATE RESOURCE POOL 或者稍后使用 ALTER RESOURCE POOL 创建任何由用户定义的资源池时设置所有三个参数。

计算 GENERAL 池查询预算

Vertica 使用以下公式计算 GENERAL 池中的查询预算:

queryBudget = queuingThresholdPool / PLANNEDCONCURRENCY

计算用户定义的资源池的查询预算

对于用户定义的资源池,Vertica 使用以下算法:

  1. 如果 MEMORYSIZE 设置为 0 并且 MAXMEMORYSIZE 未设置:

    queryBudget = queuingThresholdGeneralPool / PLANNEDCONCURRENCY
    
  2. 如果 MEMORYSIZE 设置为 0 并且 MAXMEMORYSIZE 设置为非默认值:

    query-budget = queuingThreshold / PLANNEDCONCURRENCY
    
  3. 如果 MEMORYSIZE 设置为非默认值:

    queryBudget = MEMORYSIZE / PLANNEDCONCURRENCY
    

通过仔细调整资源池的 MEMORYSIZEPLANNEDCONCURRENCY 参数,可以控制能够为查询预算多少内存。

另请参阅

您是否需要在预算范围内查询?Vertica 用户社区中。