diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-06-29 18:34:57 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-06-29 18:34:57 +0300 |
commit | cc9d4b3e08fcbdfcdad6491c00daf6f72e48a0a6 (patch) | |
tree | 0d73bb7984eba60b61dabfc60c9a678c85999175 | |
parent | fe0426ad0764b6e1addb8d0c5f1730cd4441b89e (diff) | |
download | ydb-cc9d4b3e08fcbdfcdad6491c00daf6f72e48a0a6.tar.gz |
memory allocator objects count for monitoring
5 files changed, 70 insertions, 2 deletions
diff --git a/ydb/core/tx/columnshard/counters/common/object_counter.h b/ydb/core/tx/columnshard/counters/common/object_counter.h new file mode 100644 index 0000000000..b3cea6c284 --- /dev/null +++ b/ydb/core/tx/columnshard/counters/common/object_counter.h @@ -0,0 +1,61 @@ +#pragma once +#include "owner.h" +#include <ydb/core/protos/services.pb.h> +#include <library/cpp/actors/core/log.h> + +namespace NKikimr::NColumnShard { + +template <class TObject, bool UseSignals, bool UseLogs> +class TMonitoringObjectsCounterImpl: public TCommonCountersOwner { +private: + using TBase = TCommonCountersOwner; + NMonitoring::TDynamicCounters::TCounterPtr Counter; + NMonitoring::TDynamicCounters::TCounterPtr Allocation; + NMonitoring::TDynamicCounters::TCounterPtr Free; +public: + TMonitoringObjectsCounterImpl() + : TBase("ObjectsCounter") + { + TBase::DeepSubGroup("type_id", TypeName<TObject>()); + Counter = TCommonCountersOwner::GetValue("ObjectsCount"); + Allocation = TCommonCountersOwner::GetDeriviative("Allocation"); + Free = TCommonCountersOwner::GetDeriviative("Free"); + } + + void Inc() const { + Counter->Inc(); + Allocation->Add(1); + } + + void Dec() const { + Counter->Dec(); + Free->Add(1); + } +}; + +template <class TObject, bool UseSignals, bool UseLogs> +class TMonitoringObjectsCounter { +private: + static inline TAtomicCounter Counter = 0; +public: + TMonitoringObjectsCounter() { + if (UseSignals) { + Singleton<TMonitoringObjectsCounterImpl<TObject, UseSignals, UseLogs>>()->Inc(); + } + Counter.Inc(); + if (UseLogs) { + AFL_TRACE(NKikimrServices::OBJECTS_MONITORING)("event", "create")("object_type", TypeName<TObject>())("count", Counter.Val()); + } + } + ~TMonitoringObjectsCounter() { + if (UseSignals) { + Singleton<TMonitoringObjectsCounterImpl<TObject, UseSignals, UseLogs>>()->Dec(); + } + Counter.Dec(); + if (UseLogs) { + AFL_TRACE(NKikimrServices::OBJECTS_MONITORING)("event", "destroy")("object_type", TypeName<TObject>())("count", Counter.Val()); + } + } +}; + +} diff --git a/ydb/core/tx/columnshard/counters/common/owner.cpp b/ydb/core/tx/columnshard/counters/common/owner.cpp index 7e98e08417..69ea6bfd61 100644 --- a/ydb/core/tx/columnshard/counters/common/owner.cpp +++ b/ydb/core/tx/columnshard/counters/common/owner.cpp @@ -46,4 +46,8 @@ std::shared_ptr<TValueAggregationClient> TCommonCountersOwner::GetValueAutoAggre return agent->GetClient(); } +void TCommonCountersOwner::DeepSubGroup(const TString& id, const TString& value) { + SubGroup = SubGroup->GetSubgroup(id, value); +} + } diff --git a/ydb/core/tx/columnshard/counters/common/owner.h b/ydb/core/tx/columnshard/counters/common/owner.h index a39b4b5005..bf5e3b7525 100644 --- a/ydb/core/tx/columnshard/counters/common/owner.h +++ b/ydb/core/tx/columnshard/counters/common/owner.h @@ -24,6 +24,7 @@ public: NMonitoring::TDynamicCounters::TCounterPtr GetAggregationValue(const TString& name) const; NMonitoring::TDynamicCounters::TCounterPtr GetValue(const TString& name) const; NMonitoring::TDynamicCounters::TCounterPtr GetDeriviative(const TString& name) const; + void DeepSubGroup(const TString& id, const TString& value); NMonitoring::THistogramPtr GetHistogram(const TString& name, NMonitoring::IHistogramCollectorPtr&& hCollector) const; TCommonCountersOwner(const TString& module, TIntrusivePtr<::NMonitoring::TDynamicCounters> baseSignals = nullptr); diff --git a/ydb/core/tx/columnshard/engines/reader/filter_assembler.h b/ydb/core/tx/columnshard/engines/reader/filter_assembler.h index d8efa4e8e9..4a4bb0d9c3 100644 --- a/ydb/core/tx/columnshard/engines/reader/filter_assembler.h +++ b/ydb/core/tx/columnshard/engines/reader/filter_assembler.h @@ -5,12 +5,13 @@ #include <ydb/core/formats/arrow/arrow_filter.h> #include <ydb/core/tx/columnshard/engines/portion_info.h> #include <ydb/core/tx/columnshard/engines/indexed_read_data.h> +#include <ydb/core/tx/columnshard/counters/common/object_counter.h> #include <contrib/libs/apache/arrow/cpp/src/arrow/record_batch.h> namespace NKikimr::NOlap::NIndexedReader { - class TAssembleFilter: public NColumnShard::IDataTasksProcessor::ITask { + class TAssembleFilter: public NColumnShard::IDataTasksProcessor::ITask, public NColumnShard::TMonitoringObjectsCounter<TAssembleFilter, true, true> { private: using TBase = NColumnShard::IDataTasksProcessor::ITask; TPortionInfo::TPreparedBatchData BatchConstructor; diff --git a/ydb/core/tx/columnshard/engines/reader/postfilter_assembler.h b/ydb/core/tx/columnshard/engines/reader/postfilter_assembler.h index db09e5ea06..7fc7f9f920 100644 --- a/ydb/core/tx/columnshard/engines/reader/postfilter_assembler.h +++ b/ydb/core/tx/columnshard/engines/reader/postfilter_assembler.h @@ -2,6 +2,7 @@ #include "common.h" #include "conveyor_task.h" +#include <ydb/core/tx/columnshard/counters/common/object_counter.h> #include <ydb/core/tx/columnshard/engines/portion_info.h> #include <ydb/core/formats/arrow/arrow_filter.h> @@ -9,7 +10,7 @@ namespace NKikimr::NOlap::NIndexedReader { class TBatch; -class TAssembleBatch: public NColumnShard::IDataTasksProcessor::ITask { +class TAssembleBatch: public NColumnShard::IDataTasksProcessor::ITask, public NColumnShard::TMonitoringObjectsCounter<TAssembleBatch, true, true> { private: using TBase = NColumnShard::IDataTasksProcessor::ITask; TPortionInfo::TPreparedBatchData BatchConstructor; |