[enhancement](memtracker) Optimize exec node memory tracking (#14711)

This commit is contained in:
Xinyi Zou
2022-12-01 14:52:21 +08:00
committed by GitHub
parent b4d32a0c44
commit 176f519fa1
49 changed files with 170 additions and 151 deletions

View File

@ -219,9 +219,18 @@ Status ExecNode::prepare(RuntimeState* state) {
std::bind<int64_t>(&RuntimeProfile::units_per_second, _rows_returned_counter,
runtime_profile()->total_time_counter()),
"");
_mem_tracker = std::make_shared<MemTracker>("ExecNode:" + _runtime_profile->name(),
_runtime_profile.get());
SCOPED_CONSUME_MEM_TRACKER(_mem_tracker.get());
_mem_tracker_held =
std::make_unique<MemTracker>("ExecNode:" + _runtime_profile->name(),
_runtime_profile.get(), nullptr, "PeakMemoryUsage");
// Only when the query profile is enabled, the node allocated memory will be track through the mem hook,
// otherwise _mem_tracker_growh is nullptr, and SCOPED_CONSUME_MEM_TRACKER will do nothing.
if (state->query_options().__isset.is_report_success &&
state->query_options().is_report_success) {
_mem_tracker_growh = std::make_shared<MemTracker>(
"ExecNode:MemoryOnlyTrackAlloc:" + _runtime_profile->name(), _runtime_profile.get(),
nullptr, "MemoryOnlyTrackAllocNoConsiderFree", true);
}
SCOPED_CONSUME_MEM_TRACKER(mem_tracker_growh());
if (_vconjunct_ctx_ptr) {
RETURN_IF_ERROR((*_vconjunct_ctx_ptr)->prepare(state, intermediate_row_desc()));
@ -243,7 +252,7 @@ Status ExecNode::prepare(RuntimeState* state) {
}
Status ExecNode::open(RuntimeState* state) {
SCOPED_CONSUME_MEM_TRACKER(_mem_tracker.get());
SCOPED_CONSUME_MEM_TRACKER(mem_tracker_growh());
if (_vconjunct_ctx_ptr) {
RETURN_IF_ERROR((*_vconjunct_ctx_ptr)->open(state));
}