aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2023-06-29 18:34:57 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2023-06-29 18:34:57 +0300
commitcc9d4b3e08fcbdfcdad6491c00daf6f72e48a0a6 (patch)
tree0d73bb7984eba60b61dabfc60c9a678c85999175
parentfe0426ad0764b6e1addb8d0c5f1730cd4441b89e (diff)
downloadydb-cc9d4b3e08fcbdfcdad6491c00daf6f72e48a0a6.tar.gz
memory allocator objects count for monitoring
-rw-r--r--ydb/core/tx/columnshard/counters/common/object_counter.h61
-rw-r--r--ydb/core/tx/columnshard/counters/common/owner.cpp4
-rw-r--r--ydb/core/tx/columnshard/counters/common/owner.h1
-rw-r--r--ydb/core/tx/columnshard/engines/reader/filter_assembler.h3
-rw-r--r--ydb/core/tx/columnshard/engines/reader/postfilter_assembler.h3
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;