Skip to content

Commit eed0a46

Browse files
authored
Added metrics to DeviceSchemaCache's memory and entries num (apache#14826)
* Partial * partial * put * partial
1 parent 29b9ead commit eed0a46

File tree

6 files changed

+83
-3
lines changed

6 files changed

+83
-3
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/IDualKeyCacheStats.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,10 @@ public interface IDualKeyCacheStats {
3939

4040
/** Return current memory usage of dual key cache. */
4141
long memoryUsage();
42+
43+
/** Return capacity of dual key cache. */
44+
long capacity();
45+
46+
/** Return entries num of dual key cache */
47+
long entriesCount();
4248
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/CacheStats.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class CacheStats implements IDualKeyCacheStats {
3131
private final long memoryThreshold;
3232

3333
private final AtomicLong memoryUsage = new AtomicLong(0);
34+
private final AtomicLong entriesCount = new AtomicLong(0);
3435

3536
private final AtomicLong requestCount = new AtomicLong(0);
3637
private final AtomicLong hitCount = new AtomicLong(0);
@@ -68,6 +69,14 @@ void recordMiss(int num) {
6869
requestCount.getAndAdd(num);
6970
}
7071

72+
void increaseEntryCount() {
73+
entriesCount.incrementAndGet();
74+
}
75+
76+
void decreaseEntryCount() {
77+
entriesCount.decrementAndGet();
78+
}
79+
7180
@Override
7281
public long requestCount() {
7382
return requestCount.get();
@@ -96,13 +105,24 @@ public long memoryUsage() {
96105
return memoryUsage.get();
97106
}
98107

108+
@Override
109+
public long capacity() {
110+
return memoryThreshold;
111+
}
112+
113+
@Override
114+
public long entriesCount() {
115+
return entriesCount.get();
116+
}
117+
99118
void reset() {
100-
resetMemoryUsage();
119+
resetMemoryUsageAndEntriesCount();
101120
hitCount.set(0);
102121
requestCount.set(0);
103122
}
104123

105-
void resetMemoryUsage() {
124+
void resetMemoryUsageAndEntriesCount() {
106125
memoryUsage.set(0);
126+
entriesCount.set(0);
107127
}
108128
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/DualKeyCacheImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ public void put(final FK firstKey, final SK secondKey, final V value) {
160160
cacheEntry =
161161
cacheEntryManager.createCacheEntry(secondKey, value, finalCacheEntryGroup);
162162
cacheEntryManager.put(cacheEntry);
163+
cacheStats.increaseEntryCount();
163164
usedMemorySize.getAndAdd(sizeComputer.computeSecondKeySize(sk));
164165
} else {
165166
final V existingValue = cacheEntry.getValue();
@@ -208,6 +209,7 @@ public void update(
208209
cacheEntryManager.createCacheEntry(
209210
secondKey, value, finalCacheEntryGroup);
210211
cacheEntryManager.put(entry);
212+
cacheStats.increaseEntryCount();
211213
usedMemorySize.getAndAdd(
212214
sizeComputer.computeSecondKeySize(sk)
213215
+ sizeComputer.computeValueSize(entry.getValue()));
@@ -304,6 +306,7 @@ private int evictOneCacheEntry() {
304306
final ICacheEntryGroup<FK, SK, V, T> belongedGroup = evictCacheEntry.getBelongedGroup();
305307
evictCacheEntry.setBelongedGroup(null);
306308
belongedGroup.removeCacheEntry(evictCacheEntry.getSecondKey());
309+
cacheStats.decreaseEntryCount();
307310
evictedSize.getAndAdd(sizeComputer.computeSecondKeySize(evictCacheEntry.getSecondKey()));
308311

309312
if (belongedGroup.isEmpty()) {
@@ -334,7 +337,7 @@ public void invalidateAll() {
334337
private void executeInvalidateAll() {
335338
firstKeyMap.clear();
336339
cacheEntryManager.cleanUp();
337-
cacheStats.resetMemoryUsage();
340+
cacheStats.resetMemoryUsageAndEntriesCount();
338341
}
339342

340343
@Override
@@ -364,6 +367,7 @@ public void invalidate(final FK firstKey) {
364367
it.hasNext(); ) {
365368
final Map.Entry<SK, T> entry = it.next();
366369
if (cacheEntryManager.invalidate(entry.getValue())) {
370+
cacheStats.decreaseEntryCount();
367371
estimateSize +=
368372
sizeComputer.computeSecondKeySize(entry.getKey())
369373
+ sizeComputer.computeValueSize(entry.getValue().getValue());
@@ -387,6 +391,7 @@ public void invalidate(final FK firstKey, final SK secondKey) {
387391

388392
final T entry = cacheEntryGroup.getCacheEntry(secondKey);
389393
if (Objects.nonNull(entry) && cacheEntryManager.invalidate(entry)) {
394+
cacheStats.decreaseEntryCount();
390395
usedMemorySize.getAndAdd(
391396
sizeComputer.computeSecondKeySize(entry.getSecondKey())
392397
+ sizeComputer.computeValueSize(entry.getValue()));
@@ -418,6 +423,7 @@ public void invalidate(final FK firstKey, final Predicate<SK> secondKeyChecker)
418423
it.hasNext(); ) {
419424
final Map.Entry<SK, T> entry = it.next();
420425
if (cacheEntryManager.invalidate(entry.getValue())) {
426+
cacheStats.decreaseEntryCount();
421427
cacheEntryGroup.removeCacheEntry(entry.getKey());
422428
estimateSize.addAndGet(
423429
sizeComputer.computeSecondKeySize(entry.getKey())
@@ -452,6 +458,7 @@ public void invalidate(
452458
}
453459

454460
if (cacheEntryManager.invalidate(entry.getValue())) {
461+
cacheStats.decreaseEntryCount();
455462
entryGroup.removeCacheEntry(entry.getKey());
456463
estimateSize.addAndGet(
457464
sizeComputer.computeSecondKeySize(entry.getKey())

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,18 @@ long getRequestCount() {
508508
return dualKeyCache.stats().requestCount();
509509
}
510510

511+
long getMemoryUsage() {
512+
return dualKeyCache.stats().memoryUsage();
513+
}
514+
515+
long capacity() {
516+
return dualKeyCache.stats().capacity();
517+
}
518+
519+
long entriesCount() {
520+
return dualKeyCache.stats().entriesCount();
521+
}
522+
511523
void invalidateLastCache(final @Nonnull String database) {
512524
readWriteLock.writeLock().lock();
513525

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCacheMetrics.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
import java.util.Objects;
3030

3131
public class TableDeviceSchemaCacheMetrics implements IMetricSet {
32+
33+
private static final String SCHEMA_CACHE_TOTAL_USAGE = "schema_cache_total_usage";
34+
private static final String SCHEMA_CACHE_MEM_CAPACITY = "schema_cache_mem_capacity";
35+
3236
private final TableDeviceSchemaCache tableDeviceSchemaCache;
3337

3438
public TableDeviceSchemaCacheMetrics(final TableDeviceSchemaCache dataNodeSchemaCache) {
@@ -55,6 +59,25 @@ public void bindTo(final AbstractMetricService metricService) {
5559
"SchemaCache",
5660
Tag.TYPE.toString(),
5761
"all");
62+
metricService.createAutoGauge(
63+
Metric.MEM.toString(),
64+
MetricLevel.IMPORTANT,
65+
tableDeviceSchemaCache,
66+
TableDeviceSchemaCache::getMemoryUsage,
67+
Tag.NAME.toString(),
68+
SCHEMA_CACHE_TOTAL_USAGE);
69+
metricService.createAutoGauge(
70+
Metric.MEM.toString(),
71+
MetricLevel.IMPORTANT,
72+
tableDeviceSchemaCache,
73+
TableDeviceSchemaCache::capacity,
74+
Tag.NAME.toString(),
75+
SCHEMA_CACHE_MEM_CAPACITY);
76+
metricService.createAutoGauge(
77+
Metric.CACHE_ENTRIES_NUM.toString(),
78+
MetricLevel.IMPORTANT,
79+
tableDeviceSchemaCache,
80+
TableDeviceSchemaCache::entriesCount);
5881
}
5982

6083
@Override
@@ -73,6 +96,17 @@ public void unbindFrom(final AbstractMetricService metricService) {
7396
"SchemaCache",
7497
Tag.TYPE.toString(),
7598
"all");
99+
metricService.remove(
100+
MetricType.AUTO_GAUGE,
101+
Metric.MEM.toString(),
102+
Tag.NAME.toString(),
103+
SCHEMA_CACHE_TOTAL_USAGE);
104+
metricService.remove(
105+
MetricType.AUTO_GAUGE,
106+
Metric.MEM.toString(),
107+
Tag.NAME.toString(),
108+
SCHEMA_CACHE_MEM_CAPACITY);
109+
metricService.remove(MetricType.AUTO_GAUGE, Metric.CACHE_ENTRIES_NUM.toString());
76110
}
77111

78112
@Override

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public enum Metric {
9898
MEM("mem"),
9999
CACHE("cache"),
100100
CACHE_HIT_RATE("cache_hit"),
101+
CACHE_ENTRIES_NUM("cache_entries_num"),
101102
QUANTITY("quantity"),
102103
LEADER_QUANTITY("leader_quantity"),
103104
SCHEMA_REGION("schema_region"),

0 commit comments

Comments
 (0)