This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 4fde65e41e [IOTDB-3394] Add cache metrics (#6201)
4fde65e41e is described below
commit 4fde65e41e7345937b309fa38ff303c25de4721a
Author: ZhangHongYin <[email protected]>
AuthorDate: Thu Jun 9 11:45:42 2022 +0800
[IOTDB-3394] Add cache metrics (#6201)
* rename CompactionMetricsManager and add CacheMetricsRecorder.
* fix cache name.
* fix the initiation of metric service.
* update doc.
---
docs/UserGuide/Maintenance-Tools/Metric-Tool.md | 6 +-
docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md | 5 +-
.../engine/compaction/CompactionTaskManager.java | 11 ++--
.../utils/AlignedSeriesCompactionExecutor.java | 8 +--
.../utils/SingleSeriesCompactionExecutor.java | 10 ++--
.../writer/AbstractCompactionWriter.java | 4 +-
.../db/metadata/cache/DataNodeSchemaCache.java | 17 ++++++
.../mpp/plan/analyze/ClusterPartitionFetcher.java | 41 +++++++++-----
.../java/org/apache/iotdb/db/service/DataNode.java | 3 +-
.../iotdb/db/service/metrics/enums/Metric.java | 1 +
.../metrics/recorder/CacheMetricsRecorder.java | 65 ++++++++++++++++++++++
.../recorder/CompactionMetricsRecorder.java} | 16 ++++--
12 files changed, 147 insertions(+), 40 deletions(-)
diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
index a3e311186d..0ed6b05ad7 100644
--- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -101,11 +101,13 @@ Next, we will choose Prometheus format data as samples to
describe each kind of
| ------ | --------------------------------------- | --------- |
--------------------------------------------------------------------- |
--------------------------------- |
| mem | name="chunkMetaData/storageGroup/mtree" | important | Current
memory size of chunkMetaData/storageGroup/mtree data in bytes |
mem{name="chunkMetaData",} 2050.0 |
-#### 4.3.4. Cache Hit Ratio
+#### 4.3.4. Cache
| Metric | Tag | level |
Description |
Sample |
| --------- | --------------------------------------- | --------- |
----------------------------------------------------------------------------- |
--------------------------- |
-| cache_hit | name="chunk/timeSeriesMeta/bloomFilter" | important | Cache hit
ratio of chunk/timeSeriesMeta and prevention ratio of bloom filter |
cache_hit{name="chunk",} 80 |
+| cache_hit | name="chunk/timeSeriesMeta/bloomFilter/SchemaCache" | important
| Cache hit ratio of chunk/timeSeriesMeta/SchemaCache and prevention ratio of
bloom filter | cache_hit{name="chunk",} 80 |
+| cache_total | name="StorageGroup/SchemaPartition/DataPartition",
type="hit/all" | important | The cache hit/all counts of
StorageGroup/SchemaPartition/DataPartition |
cache_total{name="DataPartition",type="all",} 801.0 |
+
#### 4.3.5. Business Data
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
index d7e5307548..0fcdc54abc 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -100,11 +100,12 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通
| ------ | --------------------------------------- | --------- |
-------------------------------------------------- |
--------------------------------- |
| mem | name="chunkMetaData/storageGroup/mtree" | important |
chunkMetaData/storageGroup/mtree占用的内存(byte) | mem{name="chunkMetaData",} 2050.0
|
-#### 4.3.4. 缓存命中率
+#### 4.3.4. 缓存
| Metric | Tag | level | 说明
| 示例 |
| --------- | --------------------------------------- | --------- |
------------------------------------------------ | --------------------------- |
-| cache_hit | name="chunk/timeSeriesMeta/bloomFilter" | important |
chunk/timeSeriesMeta缓存命中率,bloomFilter拦截率 | cache_hit{name="chunk",} 80 |
+| cache_hit | name="chunk/timeSeriesMeta/bloomFilter/SchemaCache" | important
| chunk/timeSeriesMeta/SchemaCache缓存命中率,bloomFilter拦截率 |
cache_hit{name="chunk",} 80 |
+| cache_total | name="StorageGroup/SchemaPartition/DataPartition",
type="hit/all" | important | StorageGroup/SchemaPartition/DataPartition 的命中/总次数
| cache_total{name="DataPartition",type="all",} 801.0 |
#### 4.3.5. 业务数据
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
index 4b07aa124a..76a53c7042 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
@@ -32,6 +32,7 @@ import
org.apache.iotdb.db.engine.compaction.comparator.DefaultCompactionTaskCom
import org.apache.iotdb.db.engine.compaction.constant.CompactionTaskStatus;
import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask;
import org.apache.iotdb.db.engine.compaction.task.CompactionTaskSummary;
+import org.apache.iotdb.db.service.metrics.recorder.CompactionMetricsRecorder;
import org.apache.iotdb.db.utils.datastructure.FixedPriorityBlockingQueue;
import com.google.common.util.concurrent.RateLimiter;
@@ -109,7 +110,7 @@ public class CompactionTaskManager implements IService {
AbstractCompactionTask::resetCompactionCandidateStatusForAllSourceFiles);
candidateCompactionTaskQueue.regsitPollLastHook(
x ->
- CompactionMetricsManager.recordTaskInfo(
+ CompactionMetricsRecorder.recordTaskInfo(
x, CompactionTaskStatus.POLL_FROM_QUEUE,
candidateCompactionTaskQueue.size()));
// Periodically do the following: fetch the highest priority thread from
the
@@ -224,7 +225,7 @@ public class CompactionTaskManager implements IService {
candidateCompactionTaskQueue.put(compactionTask);
// add metrics
- CompactionMetricsManager.recordTaskInfo(
+ CompactionMetricsRecorder.recordTaskInfo(
compactionTask, CompactionTaskStatus.ADD_TO_QUEUE,
candidateCompactionTaskQueue.size());
return true;
@@ -251,12 +252,12 @@ public class CompactionTaskManager implements IService {
AbstractCompactionTask task = candidateCompactionTaskQueue.take();
// add metrics
- CompactionMetricsManager.recordTaskInfo(
+ CompactionMetricsRecorder.recordTaskInfo(
task, CompactionTaskStatus.POLL_FROM_QUEUE,
candidateCompactionTaskQueue.size());
if (task != null && task.checkValidAndSetMerging()) {
submitTask(task);
- CompactionMetricsManager.recordTaskInfo(
+ CompactionMetricsRecorder.recordTaskInfo(
task, CompactionTaskStatus.READY_TO_EXECUTE,
currentTaskNum.get());
} else {
logger.warn("A task {} is not submitted", task);
@@ -300,7 +301,7 @@ public class CompactionTaskManager implements IService {
storageGroupTasks.get(storageGroupName).remove(task);
}
// add metrics
- CompactionMetricsManager.recordTaskInfo(
+ CompactionMetricsRecorder.recordTaskInfo(
task, CompactionTaskStatus.FINISHED, currentTaskNum.get());
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
index 8ee99d9e1f..c9c36378f5 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
@@ -20,11 +20,11 @@ package org.apache.iotdb.db.engine.compaction.inner.utils;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.cache.ChunkCache;
-import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager;
import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.engine.compaction.constant.CompactionType;
import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+import org.apache.iotdb.db.service.metrics.recorder.CompactionMetricsRecorder;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
@@ -136,7 +136,7 @@ public class AlignedSeriesCompactionExecutor {
new TsFileAlignedSeriesReaderIterator(reader,
alignedChunkMetadataList, schemaList);
while (readerIterator.hasNext()) {
Pair<AlignedChunkReader, Long> chunkReaderAndChunkSize =
readerIterator.nextReader();
- CompactionMetricsManager.recordReadInfo(chunkReaderAndChunkSize.right);
+
CompactionMetricsRecorder.recordReadInfo(chunkReaderAndChunkSize.right);
compactOneAlignedChunk(chunkReaderAndChunkSize.left);
}
}
@@ -144,7 +144,7 @@ public class AlignedSeriesCompactionExecutor {
if (remainingPointInChunkWriter != 0L) {
CompactionTaskManager.mergeRateLimiterAcquire(
rateLimiter, chunkWriter.estimateMaxSeriesMemSize());
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
true,
@@ -182,7 +182,7 @@ public class AlignedSeriesCompactionExecutor {
|| chunkWriter.estimateMaxSeriesMemSize() >= chunkSizeThreshold *
schemaList.size()) {
CompactionTaskManager.mergeRateLimiterAcquire(
rateLimiter, chunkWriter.estimateMaxSeriesMemSize());
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
true,
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
index 1bba81dd04..bcc3f0ef3a 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
@@ -20,11 +20,11 @@ package org.apache.iotdb.db.engine.compaction.inner.utils;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager;
import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.engine.compaction.constant.CompactionType;
import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+import org.apache.iotdb.db.service.metrics.recorder.CompactionMetricsRecorder;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
@@ -124,7 +124,7 @@ public class SingleSeriesCompactionExecutor {
if (this.chunkWriter == null) {
constructChunkWriterFromReadChunk(currentChunk);
}
- CompactionMetricsManager.recordReadInfo(
+ CompactionMetricsRecorder.recordReadInfo(
currentChunk.getHeader().getSerializedSize() +
currentChunk.getHeader().getDataSize());
// if this chunk is modified, deserialize it into points
@@ -307,7 +307,7 @@ public class SingleSeriesCompactionExecutor {
if (chunkMetadata.getEndTime() > maxEndTimestamp) {
maxEndTimestamp = chunkMetadata.getEndTime();
}
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
isCachedChunk ? ProcessChunkType.MERGE_CHUNK :
ProcessChunkType.FLUSH_CHUNK,
false,
@@ -320,7 +320,7 @@ public class SingleSeriesCompactionExecutor {
|| chunkWriter.estimateMaxSeriesMemSize() >= targetChunkSize) {
CompactionTaskManager.mergeRateLimiterAcquire(
compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize());
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
false,
@@ -342,7 +342,7 @@ public class SingleSeriesCompactionExecutor {
private void flushChunkWriter() throws IOException {
CompactionTaskManager.mergeRateLimiterAcquire(
compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize());
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
false,
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
index 5c1460230d..343e88ee58 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
@@ -19,10 +19,10 @@
package org.apache.iotdb.db.engine.compaction.writer;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.compaction.CompactionMetricsManager;
import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.engine.compaction.constant.CompactionType;
import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType;
+import org.apache.iotdb.db.service.metrics.recorder.CompactionMetricsRecorder;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.Binary;
@@ -152,7 +152,7 @@ public abstract class AbstractCompactionWriter implements
AutoCloseable {
throws IOException {
if (measurementPointCountArray[subTaskId] % 10 == 0 &&
checkChunkSize(subTaskId)) {
flushChunkToFileWriter(fileWriter, subTaskId);
- CompactionMetricsManager.recordWriteInfo(
+ CompactionMetricsRecorder.recordWriteInfo(
this instanceof CrossSpaceCompactionWriter
? CompactionType.CROSS_COMPACTION
: CompactionType.INNER_UNSEQ_COMPACTION,
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
index 34054509e1..23fa436c8f 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
@@ -24,6 +24,11 @@ import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.mpp.common.schematree.SchemaTree;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
@@ -42,6 +47,18 @@ public class DataNodeSchemaCache {
private DataNodeSchemaCache() {
cache =
Caffeine.newBuilder().maximumSize(config.getDataNodeSchemaCacheSize()).build();
+ if
(MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) {
+ // add metrics
+ MetricsService.getInstance()
+ .getMetricManager()
+ .getOrCreateAutoGauge(
+ Metric.CACHE_HIT.toString(),
+ MetricLevel.IMPORTANT,
+ cache,
+ l -> (long) (l.stats().hitRate() * 100),
+ Tag.NAME.toString(),
+ "schemaCache");
+ }
}
public static DataNodeSchemaCache getInstance() {
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
index c21b75346c..1470daf66a 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
@@ -47,6 +47,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
import org.apache.iotdb.db.metadata.utils.MetaUtils;
import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree;
+import org.apache.iotdb.db.service.metrics.recorder.CacheMetricsRecorder;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.iotdb.tsfile.utils.PublicBAOS;
@@ -451,26 +452,29 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
/** get storage group by cache */
public boolean getStorageGroup(
List<String> devicePaths, Map<String, String> deviceToStorageGroupMap)
{
+ boolean result = true;
if (storageGroupCache.size() == 0) {
logger.debug("Failed to get storage group");
- return false;
- }
- for (String devicePath : devicePaths) {
- boolean hit = false;
- for (String storageGroup : storageGroupCache) {
- if (devicePath.startsWith(storageGroup + ".")) {
- deviceToStorageGroupMap.put(devicePath, storageGroup);
- hit = true;
+ result = false;
+ } else {
+ for (String devicePath : devicePaths) {
+ boolean hit = false;
+ for (String storageGroup : storageGroupCache) {
+ if (devicePath.startsWith(storageGroup + ".")) {
+ deviceToStorageGroupMap.put(devicePath, storageGroup);
+ hit = true;
+ break;
+ }
+ }
+ if (!hit) {
+ logger.debug("{} cannot hit storage group cache", devicePath);
+ result = false;
break;
}
}
- if (!hit) {
- logger.debug("{} cannot hit storage group cache", devicePath);
- return false;
- }
}
- logger.debug("Hit storage group");
- return true;
+ CacheMetricsRecorder.record(result, "StorageGroup");
+ return result;
}
/** update the cache of storage group */
@@ -493,7 +497,9 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
/** get schemaPartition by patternTree */
public SchemaPartition getSchemaPartition(Map<String, String>
deviceToStorageGroupMap) {
+ String name = "SchemaPartition";
if (deviceToStorageGroupMap.size() == 0) {
+ CacheMetricsRecorder.record(false, name);
return null;
}
Map<String, Map<TSeriesPartitionSlot, TRegionReplicaSet>>
schemaPartitionMap =
@@ -506,6 +512,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
if (null == regionReplicaSet) {
// if one device not find, then return cache miss.
logger.debug("Failed to find schema partition");
+ CacheMetricsRecorder.record(false, name);
return null;
}
String storageGroupName = deviceToStorageGroupMap.get(device);
@@ -518,6 +525,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
}
logger.debug("Hit schema partition");
// cache hit
+ CacheMetricsRecorder.record(true, name);
return new SchemaPartition(
schemaPartitionMap, seriesSlotExecutorName, seriesPartitionSlotNum);
}
@@ -525,7 +533,9 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
/** get dataPartition by query param map */
public DataPartition getDataPartition(
Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) {
+ String name = "DataPartition";
if (sgNameToQueryParamsMap.size() == 0) {
+ CacheMetricsRecorder.record(false, name);
return null;
}
Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot,
List<TRegionReplicaSet>>>>
@@ -545,6 +555,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
|| 0 ==
dataPartitionQueryParam.getTimePartitionSlotList().size()) {
// if query all data, cache miss
logger.debug("Failed to find data partition");
+ CacheMetricsRecorder.record(false, name);
return null;
}
TSeriesPartitionSlot seriesPartitionSlot =
@@ -564,6 +575,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
if (null == regionReplicaSets) {
// if one time partition not find, cache miss
logger.debug("Failed to find data partition");
+ CacheMetricsRecorder.record(false, name);
return null;
}
timePartitionSlotListMap.put(timePartitionSlot, regionReplicaSets);
@@ -572,6 +584,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
}
logger.debug("Hit data partition");
// cache hit
+ CacheMetricsRecorder.record(true, name);
return new DataPartition(dataPartitionMap, seriesSlotExecutorName,
seriesPartitionSlotNum);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index 72b6a8df00..a6c590c148 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -267,6 +267,8 @@ public class DataNode implements DataNodeMBean {
setUncaughtExceptionHandler();
initServiceProvider();
+ // init metric service
+ registerManager.register(MetricsService.getInstance());
// init rpc service
IoTDBDescriptor.getInstance()
.getConfig()
@@ -276,7 +278,6 @@ public class DataNode implements DataNodeMBean {
registerManager.register(RPCService.getInstance());
}
- registerManager.register(MetricsService.getInstance());
logger.info("recover the schema...");
initConfigManager();
registerManager.register(new JMXService());
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
index 79c96b6fd6..6d798dfd6b 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
@@ -26,6 +26,7 @@ public enum Metric {
FILE_SIZE,
FILE_COUNT,
MEM,
+ CACHE,
CACHE_HIT,
ERROR_LOG,
QUANTITY,
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
new file mode 100644
index 0000000000..1c1a0ccda6
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.service.metrics.recorder;
+
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+
+public class CacheMetricsRecorder {
+
+ private static final boolean ENABLE_METRIC =
+ MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric();
+
+ /**
+ * record the result of cache
+ *
+ * @param result whether hit
+ * @param name the name of object that cached
+ */
+ public static void record(boolean result, String name) {
+ if (ENABLE_METRIC) {
+ if (result) {
+ // cache hit
+ MetricsService.getInstance()
+ .getMetricManager()
+ .count(
+ 1,
+ Metric.CACHE.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ name,
+ Tag.TYPE.toString(),
+ "hit");
+ }
+ MetricsService.getInstance()
+ .getMetricManager()
+ .count(
+ 1,
+ Metric.CACHE.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ name,
+ Tag.TYPE.toString(),
+ "all");
+ }
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java
b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
similarity index 94%
rename from
server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java
rename to
server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
index 3f42678141..b35f086b8b 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionMetricsManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iotdb.db.engine.compaction;
+package org.apache.iotdb.db.service.metrics.recorder;
import org.apache.iotdb.db.engine.compaction.constant.CompactionTaskStatus;
import org.apache.iotdb.db.engine.compaction.constant.CompactionType;
@@ -32,14 +32,17 @@ import org.apache.iotdb.metrics.utils.MetricLevel;
import java.util.concurrent.TimeUnit;
-public class CompactionMetricsManager {
+public class CompactionMetricsRecorder {
+
+ private static final boolean ENABLE_METRIC =
+ MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric();
public static void recordWriteInfo(
CompactionType compactionType,
ProcessChunkType processChunkType,
boolean aligned,
long byteNum) {
- if
(!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) {
+ if (!ENABLE_METRIC) {
return;
}
MetricsService.getInstance()
@@ -69,7 +72,7 @@ public class CompactionMetricsManager {
}
public static void recordReadInfo(long byteNum) {
- if
(!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) {
+ if (!ENABLE_METRIC) {
return;
}
MetricsService.getInstance()
@@ -84,7 +87,7 @@ public class CompactionMetricsManager {
public static void recordTaskInfo(
AbstractCompactionTask task, CompactionTaskStatus status, int size) {
- if
(!MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) {
+ if (!ENABLE_METRIC) {
return;
}
String taskType = "unknown";
@@ -166,6 +169,9 @@ public class CompactionMetricsManager {
"cross_compaction_count");
}
break;
+ default:
+ // do nothing
+ break;
}
}
}