44
44
45
45
namespace starrocks {
46
46
47
+ std::atomic<size_t > StoragePageCacheMetrics::returned_page_handle_count{};
48
+ std::atomic<size_t > StoragePageCacheMetrics::released_page_handle_count{};
49
+
47
50
METRIC_DEFINE_UINT_GAUGE (page_cache_lookup_count, MetricUnit::OPERATIONS);
48
51
METRIC_DEFINE_UINT_GAUGE (page_cache_hit_count, MetricUnit::OPERATIONS);
49
52
METRIC_DEFINE_UINT_GAUGE (page_cache_capacity, MetricUnit::BYTES);
53
+ METRIC_DEFINE_UINT_GAUGE (page_cache_pinned_count, MetricUnit::BYTES);
50
54
51
55
void StoragePageCache::init_metrics () {
52
56
StarRocksMetrics::instance ()->metrics ()->register_metric (" page_cache_lookup_count" , &page_cache_lookup_count);
@@ -60,6 +64,10 @@ void StoragePageCache::init_metrics() {
60
64
StarRocksMetrics::instance ()->metrics ()->register_metric (" page_cache_capacity" , &page_cache_capacity);
61
65
StarRocksMetrics::instance ()->metrics ()->register_hook (" page_cache_capacity" ,
62
66
[this ]() { page_cache_capacity.set_value (get_capacity ()); });
67
+
68
+ StarRocksMetrics::instance ()->metrics ()->register_metric (" page_cache_pinned_count" , &page_cache_pinned_count);
69
+ StarRocksMetrics::instance ()->metrics ()->register_hook (
70
+ " page_cache_pinned_count" , [this ]() { page_cache_pinned_count.set_value (get_pinned_count ()); });
63
71
}
64
72
65
73
void StoragePageCache::prune () {
@@ -92,12 +100,17 @@ bool StoragePageCache::adjust_capacity(int64_t delta, size_t min_capacity) {
92
100
return true ;
93
101
}
94
102
103
+ size_t StoragePageCache::get_pinned_count () const {
104
+ return StoragePageCacheMetrics::returned_page_handle_count - StoragePageCacheMetrics::released_page_handle_count;
105
+ }
106
+
95
107
bool StoragePageCache::lookup (const std::string& key, PageCacheHandle* handle) {
96
108
ObjectCacheHandle* obj_handle = nullptr ;
97
109
Status st = _cache->lookup (key, &obj_handle);
98
110
if (!st.ok ()) {
99
111
return false ;
100
112
}
113
+ StoragePageCacheMetrics::returned_page_handle_count++;
101
114
*handle = PageCacheHandle (_cache, obj_handle);
102
115
return true ;
103
116
}
@@ -124,6 +137,7 @@ Status StoragePageCache::insert(const std::string& key, std::vector<uint8_t>* da
124
137
Status st = _cache->insert (key, (void *)data, mem_size, deleter, &obj_handle, opts);
125
138
if (st.ok ()) {
126
139
*handle = PageCacheHandle (_cache, obj_handle);
140
+ StoragePageCacheMetrics::returned_page_handle_count++;
127
141
}
128
142
return st;
129
143
}
@@ -134,6 +148,7 @@ Status StoragePageCache::insert(const std::string& key, void* data, int64_t size
134
148
Status st = _cache->insert (key, data, size, deleter, &obj_handle, opts);
135
149
if (st.ok ()) {
136
150
*handle = PageCacheHandle (_cache, obj_handle);
151
+ StoragePageCacheMetrics::returned_page_handle_count++;
137
152
}
138
153
return st;
139
154
}
0 commit comments