Presto 如何收集运行时内存?



我正在学习Presto,我对Presto的运行时资源管理感兴趣。

我了解到 ClusterMemoryManager 会定期检查内存,但我对运行时内存的收集感到困惑。

for (QueryExecution query : queries) {
long bytes = query.getUserMemoryReservation();
DataSize sessionMaxQueryMemory = getQueryMaxMemory(query.getSession());
long queryMemoryLimit = Math.min(maxQueryMemory.toBytes(), sessionMaxQueryMemory.toBytes());
totalBytes += bytes;
if (resourceOvercommit(query.getSession()) && outOfMemory) {
// If a query has requested resource overcommit, only kill it if the cluster has run out of memory
DataSize memory = succinctBytes(bytes);
query.fail(new PrestoException(CLUSTER_OUT_OF_MEMORY,
format("The cluster is out of memory and %s=true, so this query was killed. It was using %s of memory", RESOURCE_OVERCOMMIT, memory)));
queryKilled = true;
}
if (!resourceOvercommit(query.getSession()) && bytes > queryMemoryLimit) {
DataSize maxMemory = succinctBytes(queryMemoryLimit);
query.fail(exceededGlobalLimit(maxMemory));
queryKilled = true;
}
}

Presto 如何收集正在运行的查询的内存使用情况?

任何帮助将不胜感激。

谢谢!

您可以将查询视为要执行的任务的图形。这些任务分布在群集中的节点上,并在多个线程中执行。此类任务的基本构建块是"运算符"。操作员知道他们的内存使用情况,并通过内存上下文类报告他们的内存使用情况。来自操作员的报告在节点上聚合,并发送回协调器,协调器聚合查询总数。

相关内容

  • 没有找到相关文章

最新更新