You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2022/12/20 12:52:09 UTC

[iotdb] branch rel/0.13 updated: [To rel/0.13][IOTDB-5232] Add schema memory metric (#8540)

This is an automated email from the ASF dual-hosted git repository.

zyk pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new c3e2782295 [To rel/0.13][IOTDB-5232] Add schema memory metric (#8540)
c3e2782295 is described below

commit c3e278229519b9f8aa75f031480478552737ebdf
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Tue Dec 20 20:52:02 2022 +0800

    [To rel/0.13][IOTDB-5232] Add schema memory metric (#8540)
    
    [To rel/0.13][IOTDB-5232] Add schema memory metric (#8540)
---
 docs/UserGuide/Maintenance-Tools/Metric-Tool.md    | 14 +++---
 docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md | 14 +++---
 .../org/apache/iotdb/db/metadata/MManager.java     | 21 +++++++-
 .../apache/iotdb/db/metadata/MManagerMetrics.java  | 57 ++++++++++++++++++++--
 4 files changed, 87 insertions(+), 19 deletions(-)

diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
index 57d44bbad2..8699be63e0 100644
--- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -100,9 +100,9 @@ Next, we will choose Prometheus format data as samples to describe each kind of
 
 #### 1.3.3.3. Memory Usage
 
-| Metric | Tag                                     | level     | Description                                                           | Sample                            |
-| ------ | --------------------------------------- | --------- | --------------------------------------------------------------------- | --------------------------------- |
-| mem    | name="chunkMetaData/storageGroup/mtree" | important | Current memory size of chunkMetaData/storageGroup/mtree data in bytes | mem{name="chunkMetaData",} 2050.0 |
+| Metric | Tag                                                           | level     | Description                                                                                     | Sample                            |
+| ------ |---------------------------------------------------------------| --------- |-------------------------------------------------------------------------------------------------| --------------------------------- |
+| mem    | name="chunkMetaData/storageGroup/schemaUsage/schemaRemaining" | important | Current memory size of chunkMetaData/storageGroup/schema usage/schema remaining memory in bytes | mem{name="chunkMetaData",} 2050.0 |
 
 #### 1.3.3.4. Cache
 
@@ -112,10 +112,10 @@ Next, we will choose Prometheus format data as samples to describe each kind of
 
 #### 1.3.3.5. Business Data
 
-| Metric   | Tag                                                                 | level     | Description                                                   | Sample                                        |
-|----------|---------------------------------------------------------------------|-----------|---------------------------------------------------------------|-----------------------------------------------|
-| quantity | name="timeSeries/storageGroup/device", type="total/normal/template" | important | The current count of timeSeries/storageGroup/devices in IoTDB | quantity{name="timeSeries",type="normal"} 1.0 |
-| points   | sg="{{storageGroup}}", type="flush"                                 | core      | The point number of last flushed memtable                     | quantity{name="memtable",type="flush"} 1.0    |
+| Metric   | Tag                                                                                              | level     | Description                                                                          | Sample                                        |
+|----------|--------------------------------------------------------------------------------------------------|-----------|--------------------------------------------------------------------------------------|-----------------------------------------------|
+| quantity | name="timeSeries/storageGroup/device/deviceUsingTemplate", type="total/normal/template/template" | important | The current count of timeSeries/storageGroup/devices/devices using template in IoTDB | quantity{name="timeSeries",type="normal"} 1.0 |
+| points   | sg="{{storageGroup}}", type="flush"                                                              | core      | The point number of last flushed memtable                                            | quantity{name="memtable",type="flush"} 1.0    |
 
 #### 1.3.3.6. Cluster
 
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
index 44560b68e8..3eaaffc1b2 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -99,9 +99,9 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通
 
 #### 1.3.3.3. 内存占用
 
-| Metric | Tag                                     | level     | 说明                                               | 示例                              |
-| ------ | --------------------------------------- | --------- | -------------------------------------------------- | --------------------------------- |
-| mem    | name="chunkMetaData/storageGroup/mtree" | important | chunkMetaData/storageGroup/mtree占用的内存(byte) | mem{name="chunkMetaData",} 2050.0 |
+| Metric | Tag                                                           | level     | 说明                                                            | 示例                              |
+| ------ |---------------------------------------------------------------| --------- |---------------------------------------------------------------| --------------------------------- |
+| mem    | name="chunkMetaData/storageGroup/schemaUsage/schemaRemaining" | important | chunkMetaData 占用/storageGroup 占用/schema 占用/schema 剩余的内存(byte) | mem{name="chunkMetaData",} 2050.0 |
 
 #### 1.3.3.4. 缓存
 
@@ -111,10 +111,10 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通
 
 #### 1.3.3.5. 业务数据
 
-| Metric   | Tag                                                                 | level     | 说明                                    | 示例                                          |
-|----------|---------------------------------------------------------------------| --------- |---------------------------------------| --------------------------------------------- |
-| quantity | name="timeSeries/storageGroup/device", type="total/normal/template" | important | 当前时间timeSeries/storageGroup/device的数量 | quantity{name="timeSeries",type="normal"} 1.0 |
-| points   | sg="{{storageGroup}}", type="flush"                                 | core      | 最新一个刷盘的memtale的点数                     | quantity{name="memtable",type="flush"} 1.0    |
+| Metric   | Tag                                                                                       | level     | 说明                                                 | 示例                                          |
+|----------|-------------------------------------------------------------------------------------------| --------- |----------------------------------------------------| --------------------------------------------- |
+| quantity | name="timeSeries/storageGroup/device/deviceUsingTemplate", type="total/normal/template/template" | important | 当前时间timeSeries/storageGroup/device/激活了模板的device的数量 | quantity{name="timeSeries",type="normal"} 1.0 |
+| points   | sg="{{storageGroup}}", type="flush"                                                       | core      | 最新一个刷盘的memtale的点数                                  | quantity{name="memtable",type="flush"} 1.0    |
 
 #### 1.3.3.6. 集群
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 8c05c0f8dd..a4f9dadbb5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -190,6 +190,7 @@ public class MManager {
 
   private final AtomicLong totalNormalSeriesNumber = new AtomicLong();
   private final AtomicLong totalTemplateSeriesNumber = new AtomicLong();
+  private final AtomicLong totalTemplateActivatedNumber = new AtomicLong();
 
   private final int mtreeSnapshotInterval;
   private final long mtreeSnapshotThresholdTime;
@@ -443,6 +444,7 @@ public class MManager {
       }
       this.totalNormalSeriesNumber.set(0);
       this.totalTemplateSeriesNumber.set(0);
+      this.totalTemplateActivatedNumber.set(0);
       this.templateManager.clear();
       if (logWriter != null) {
         logWriter.close();
@@ -559,7 +561,9 @@ public class MManager {
     if (!allowToCreateNewSeries) {
       throw new MetadataException(
           "IoTDB system load is too large to create timeseries, "
-              + "please increase MAX_HEAP_SIZE in iotdb-env.sh/bat and restart");
+              + "please increase MAX_HEAP_SIZE in iotdb-env.sh/bat and restart."
+              + "Current timeseries num is "
+              + totalNormalSeriesNumber.get());
     }
 
     if (seriesNumerMonitor != null && !seriesNumerMonitor.addTimeSeries(1)) {
@@ -685,7 +689,9 @@ public class MManager {
     if (!allowToCreateNewSeries) {
       throw new MetadataException(
           "IoTDB system load is too large to create timeseries, "
-              + "please increase MAX_HEAP_SIZE in iotdb-env.sh/bat and restart");
+              + "please increase MAX_HEAP_SIZE in iotdb-env.sh/bat and restart."
+              + "Current timeseries num is "
+              + totalNormalSeriesNumber.get());
     }
     int seriesCount = plan.getMeasurements().size();
 
@@ -1042,6 +1048,15 @@ public class MManager {
     return totalTemplateSeriesNumber.get();
   }
 
+  public long getTotalTemplateActivatedNumber() {
+    return totalTemplateActivatedNumber.get();
+  }
+
+  public long getTotalEstimatedMemoryUsage() {
+    return (totalNormalSeriesNumber.get() + totalTemplateActivatedNumber.get())
+        * config.getEstimatedSeriesSize();
+  }
+
   /**
    * To calculate the count of timeseries matching given path. The path could be a pattern of a full
    * path, may contain wildcard. If using prefix match, the path pattern is used to match prefix
@@ -2587,6 +2602,7 @@ public class MManager {
 
       node.setUseTemplate(false);
       int seriesCount = node.getUpperTemplate().getMeasurementsCount();
+      totalTemplateActivatedNumber.addAndGet(-1);
       totalTemplateSeriesNumber.addAndGet(-seriesCount);
       if (seriesNumerMonitor != null) {
         seriesNumerMonitor.deleteTimeSeries(seriesCount);
@@ -2649,6 +2665,7 @@ public class MManager {
       throw t;
     }
 
+    totalTemplateActivatedNumber.addAndGet(1);
     totalTemplateSeriesNumber.addAndGet(template.getMeasurementsCount());
 
     if (node != mountedMNode) {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManagerMetrics.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManagerMetrics.java
index 999796df95..b8f3df8f51 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManagerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManagerMetrics.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.metadata;
 
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.db.service.metrics.enums.Metric;
 import org.apache.iotdb.db.service.metrics.enums.Tag;
@@ -80,14 +81,40 @@ public class MManagerMetrics implements IMetricSet {
             Tag.TYPE.toString(),
             "total");
 
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.QUANTITY.toString(),
+            MetricLevel.IMPORTANT,
+            mManager,
+            MManager::getTotalTemplateActivatedNumber,
+            Tag.NAME.toString(),
+            "deviceUsingTemplate",
+            Tag.TYPE.toString(),
+            "template");
+
     MetricService.getInstance()
         .getOrCreateAutoGauge(
             Metric.MEM.toString(),
             MetricLevel.IMPORTANT,
             mManager,
-            MManager::getMtreeSize,
+            MManager::getTotalEstimatedMemoryUsage,
             Tag.NAME.toString(),
-            "mtree");
+            "schemaUsage",
+            Tag.TYPE.toString(),
+            "total");
+
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.MEM.toString(),
+            MetricLevel.IMPORTANT,
+            mManager,
+            mManager ->
+                IoTDBDescriptor.getInstance().getConfig().getAllocateMemoryForSchema()
+                    - mManager.getTotalEstimatedMemoryUsage(),
+            Tag.NAME.toString(),
+            "schemaRemaining",
+            Tag.TYPE.toString(),
+            "total");
   }
 
   @Override
@@ -129,6 +156,30 @@ public class MManagerMetrics implements IMetricSet {
             "total");
 
     MetricService.getInstance()
-        .remove(MetricType.GAUGE, Metric.MEM.toString(), Tag.NAME.toString(), "mtree");
+        .remove(
+            MetricType.GAUGE,
+            Metric.QUANTITY.toString(),
+            Tag.NAME.toString(),
+            "deviceUsingTemplate",
+            Tag.TYPE.toString(),
+            "template");
+
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MEM.toString(),
+            Tag.NAME.toString(),
+            "schemaUsage",
+            Tag.TYPE.toString(),
+            "total");
+
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MEM.toString(),
+            Tag.NAME.toString(),
+            "schemaRemaining",
+            Tag.TYPE.toString(),
+            "total");
   }
 }