This is an automated email from the ASF dual-hosted git repository.
jiangtian 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 eed0a4687b5 Added metrics to DeviceSchemaCache's memory and entries
num (#14826)
eed0a4687b5 is described below
commit eed0a4687b568d6255b79d5f90c9e7f179aee0d4
Author: Caideyipi <[email protected]>
AuthorDate: Thu Feb 13 09:36:08 2025 +0800
Added metrics to DeviceSchemaCache's memory and entries num (#14826)
* Partial
* partial
* put
* partial
---
.../schema/dualkeycache/IDualKeyCacheStats.java | 6 ++++
.../cache/schema/dualkeycache/impl/CacheStats.java | 24 +++++++++++++--
.../schema/dualkeycache/impl/DualKeyCacheImpl.java | 9 +++++-
.../fetcher/cache/TableDeviceSchemaCache.java | 12 ++++++++
.../cache/TableDeviceSchemaCacheMetrics.java | 34 ++++++++++++++++++++++
.../iotdb/commons/service/metric/enums/Metric.java | 1 +
6 files changed, 83 insertions(+), 3 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/IDualKeyCacheStats.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/IDualKeyCacheStats.java
index 9ed842cc602..9247e20a9c4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/IDualKeyCacheStats.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/IDualKeyCacheStats.java
@@ -39,4 +39,10 @@ public interface IDualKeyCacheStats {
/** Return current memory usage of dual key cache. */
long memoryUsage();
+
+ /** Return capacity of dual key cache. */
+ long capacity();
+
+ /** Return entries num of dual key cache */
+ long entriesCount();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/CacheStats.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/CacheStats.java
index 817092d3eb9..99c331962a2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/CacheStats.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/CacheStats.java
@@ -31,6 +31,7 @@ class CacheStats implements IDualKeyCacheStats {
private final long memoryThreshold;
private final AtomicLong memoryUsage = new AtomicLong(0);
+ private final AtomicLong entriesCount = new AtomicLong(0);
private final AtomicLong requestCount = new AtomicLong(0);
private final AtomicLong hitCount = new AtomicLong(0);
@@ -68,6 +69,14 @@ class CacheStats implements IDualKeyCacheStats {
requestCount.getAndAdd(num);
}
+ void increaseEntryCount() {
+ entriesCount.incrementAndGet();
+ }
+
+ void decreaseEntryCount() {
+ entriesCount.decrementAndGet();
+ }
+
@Override
public long requestCount() {
return requestCount.get();
@@ -96,13 +105,24 @@ class CacheStats implements IDualKeyCacheStats {
return memoryUsage.get();
}
+ @Override
+ public long capacity() {
+ return memoryThreshold;
+ }
+
+ @Override
+ public long entriesCount() {
+ return entriesCount.get();
+ }
+
void reset() {
- resetMemoryUsage();
+ resetMemoryUsageAndEntriesCount();
hitCount.set(0);
requestCount.set(0);
}
- void resetMemoryUsage() {
+ void resetMemoryUsageAndEntriesCount() {
memoryUsage.set(0);
+ entriesCount.set(0);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/DualKeyCacheImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/DualKeyCacheImpl.java
index 126f5314495..7a4c816f407 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/DualKeyCacheImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/DualKeyCacheImpl.java
@@ -160,6 +160,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
cacheEntry =
cacheEntryManager.createCacheEntry(secondKey, value,
finalCacheEntryGroup);
cacheEntryManager.put(cacheEntry);
+ cacheStats.increaseEntryCount();
usedMemorySize.getAndAdd(sizeComputer.computeSecondKeySize(sk));
} else {
final V existingValue = cacheEntry.getValue();
@@ -208,6 +209,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
cacheEntryManager.createCacheEntry(
secondKey, value, finalCacheEntryGroup);
cacheEntryManager.put(entry);
+ cacheStats.increaseEntryCount();
usedMemorySize.getAndAdd(
sizeComputer.computeSecondKeySize(sk)
+
sizeComputer.computeValueSize(entry.getValue()));
@@ -304,6 +306,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
final ICacheEntryGroup<FK, SK, V, T> belongedGroup =
evictCacheEntry.getBelongedGroup();
evictCacheEntry.setBelongedGroup(null);
belongedGroup.removeCacheEntry(evictCacheEntry.getSecondKey());
+ cacheStats.decreaseEntryCount();
evictedSize.getAndAdd(sizeComputer.computeSecondKeySize(evictCacheEntry.getSecondKey()));
if (belongedGroup.isEmpty()) {
@@ -334,7 +337,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
private void executeInvalidateAll() {
firstKeyMap.clear();
cacheEntryManager.cleanUp();
- cacheStats.resetMemoryUsage();
+ cacheStats.resetMemoryUsageAndEntriesCount();
}
@Override
@@ -364,6 +367,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
it.hasNext(); ) {
final Map.Entry<SK, T> entry = it.next();
if (cacheEntryManager.invalidate(entry.getValue())) {
+ cacheStats.decreaseEntryCount();
estimateSize +=
sizeComputer.computeSecondKeySize(entry.getKey())
+ sizeComputer.computeValueSize(entry.getValue().getValue());
@@ -387,6 +391,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
final T entry = cacheEntryGroup.getCacheEntry(secondKey);
if (Objects.nonNull(entry) && cacheEntryManager.invalidate(entry)) {
+ cacheStats.decreaseEntryCount();
usedMemorySize.getAndAdd(
sizeComputer.computeSecondKeySize(entry.getSecondKey())
+ sizeComputer.computeValueSize(entry.getValue()));
@@ -418,6 +423,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
it.hasNext(); ) {
final Map.Entry<SK, T> entry = it.next();
if (cacheEntryManager.invalidate(entry.getValue())) {
+ cacheStats.decreaseEntryCount();
cacheEntryGroup.removeCacheEntry(entry.getKey());
estimateSize.addAndGet(
sizeComputer.computeSecondKeySize(entry.getKey())
@@ -452,6 +458,7 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK,
V>>
}
if (cacheEntryManager.invalidate(entry.getValue())) {
+ cacheStats.decreaseEntryCount();
entryGroup.removeCacheEntry(entry.getKey());
estimateSize.addAndGet(
sizeComputer.computeSecondKeySize(entry.getKey())
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
index 195e6e896ce..9a0af25d1cf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
@@ -508,6 +508,18 @@ public class TableDeviceSchemaCache {
return dualKeyCache.stats().requestCount();
}
+ long getMemoryUsage() {
+ return dualKeyCache.stats().memoryUsage();
+ }
+
+ long capacity() {
+ return dualKeyCache.stats().capacity();
+ }
+
+ long entriesCount() {
+ return dualKeyCache.stats().entriesCount();
+ }
+
void invalidateLastCache(final @Nonnull String database) {
readWriteLock.writeLock().lock();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCacheMetrics.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCacheMetrics.java
index 56e1b23de45..e65c418c0c1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCacheMetrics.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCacheMetrics.java
@@ -29,6 +29,10 @@ import org.apache.iotdb.metrics.utils.MetricType;
import java.util.Objects;
public class TableDeviceSchemaCacheMetrics implements IMetricSet {
+
+ private static final String SCHEMA_CACHE_TOTAL_USAGE =
"schema_cache_total_usage";
+ private static final String SCHEMA_CACHE_MEM_CAPACITY =
"schema_cache_mem_capacity";
+
private final TableDeviceSchemaCache tableDeviceSchemaCache;
public TableDeviceSchemaCacheMetrics(final TableDeviceSchemaCache
dataNodeSchemaCache) {
@@ -55,6 +59,25 @@ public class TableDeviceSchemaCacheMetrics implements
IMetricSet {
"SchemaCache",
Tag.TYPE.toString(),
"all");
+ metricService.createAutoGauge(
+ Metric.MEM.toString(),
+ MetricLevel.IMPORTANT,
+ tableDeviceSchemaCache,
+ TableDeviceSchemaCache::getMemoryUsage,
+ Tag.NAME.toString(),
+ SCHEMA_CACHE_TOTAL_USAGE);
+ metricService.createAutoGauge(
+ Metric.MEM.toString(),
+ MetricLevel.IMPORTANT,
+ tableDeviceSchemaCache,
+ TableDeviceSchemaCache::capacity,
+ Tag.NAME.toString(),
+ SCHEMA_CACHE_MEM_CAPACITY);
+ metricService.createAutoGauge(
+ Metric.CACHE_ENTRIES_NUM.toString(),
+ MetricLevel.IMPORTANT,
+ tableDeviceSchemaCache,
+ TableDeviceSchemaCache::entriesCount);
}
@Override
@@ -73,6 +96,17 @@ public class TableDeviceSchemaCacheMetrics implements
IMetricSet {
"SchemaCache",
Tag.TYPE.toString(),
"all");
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.MEM.toString(),
+ Tag.NAME.toString(),
+ SCHEMA_CACHE_TOTAL_USAGE);
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.MEM.toString(),
+ Tag.NAME.toString(),
+ SCHEMA_CACHE_MEM_CAPACITY);
+ metricService.remove(MetricType.AUTO_GAUGE,
Metric.CACHE_ENTRIES_NUM.toString());
}
@Override
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index 906c9f05968..65ecf6280b5 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -98,6 +98,7 @@ public enum Metric {
MEM("mem"),
CACHE("cache"),
CACHE_HIT_RATE("cache_hit"),
+ CACHE_ENTRIES_NUM("cache_entries_num"),
QUANTITY("quantity"),
LEADER_QUANTITY("leader_quantity"),
SCHEMA_REGION("schema_region"),