首页 > 解决方案 > vertica 计划步骤中的内存分配如何发生?

问题描述

我有一种情况,即某个vertica查询GROUP_BY_SPILLED在其计划中(执行 a GROUP BY HASH)。

我没有更改投影顺序的选项(以避免按哈希分组),因此我想增加此步骤接收的内存量。

假设我的查询收到的预算为5GB. 5GB查询步骤中的分布如何?

我找不到任何文档。

标签: query-optimizationvertica

解决方案


看一下EXECUTION_ENGINE_PROFILES表。

使用PROFILE运行您的查询:

PROFILE SELECT .. FROM .. GROUP BY ..

从输出中获取 statement_id 并使用它来调查 EXECUTION_ENGINE_PROFILES。

给定一个只做的简单查询GROUP BY,运行:

SELECT path_id,
       operator_name,
       counter_name,
       sum(counter_value)
FROM v_monitor.execution_engine_profiles
WHERE transaction_id=<STATEMENT_ID>
AND counter_name ilike 'current memory capacity (bytes)'
GROUP BY 1,2,3
ORDER BY path_id;

 path_id | operator_name |          counter_name           |    sum     
---------+---------------+---------------------------------+------------
      -1 | NewEENode     | current memory capacity (bytes) |          0
      -1 | Root          | current memory capacity (bytes) |          0
       1 | ExprEval      | current memory capacity (bytes) |          0
       1 | GroupByHash   | current memory capacity (bytes) | 1406074880
       1 | GroupByPipe   | current memory capacity (bytes) |          0
       1 | ParallelUnion | current memory capacity (bytes) |          0
       1 | StorageUnion  | current memory capacity (bytes) |          0
       2 | ExprEval      | current memory capacity (bytes) |          0
       2 | Scan          | current memory capacity (bytes) |          0

有关在 Vertica 中进行分析的更多信息,请单击此处

我认为您无法修改或改进这些计数器值,除非使用RESOURCE POOLS增加查询预算


推荐阅读