20
20
#include < bvar/bvar.h>
21
21
#include < stdint.h>
22
22
23
+ #include " runtime/exec_env.h"
24
+ #include " runtime/memory/mem_tracker_limiter.h"
23
25
#include " util/runtime_profile.h"
24
26
25
27
namespace doris {
26
28
27
29
inline bvar::Adder<int64_t > g_rowset_meta_mem_bytes (" doris_rowset_meta_mem_bytes" );
28
30
inline bvar::Adder<int64_t > g_rowset_meta_num (" doris_rowset_meta_num" );
29
31
30
- inline bvar::Adder<int64_t > g_all_rowsets_mem_bytes ( " doris_all_rowsets_mem_bytes " );
31
- inline bvar::Adder<int64_t > g_all_rowsets_num ( " doris_all_rowsets_num " );
32
+ inline bvar::Adder<int64_t > g_rowset_mem_bytes ( " doris_rowset_mem_bytes " );
33
+ inline bvar::Adder<int64_t > g_rowset_num ( " doris_rowset_num " );
32
34
33
35
inline bvar::Adder<int64_t > g_tablet_meta_mem_bytes (" doris_tablet_meta_mem_bytes" );
34
36
inline bvar::Adder<int64_t > g_tablet_meta_num (" doris_tablet_meta_num" );
@@ -42,8 +44,9 @@ inline bvar::Adder<int64_t> g_tablet_index_num("doris_tablet_index_num");
42
44
inline bvar::Adder<int64_t > g_tablet_schema_mem_bytes (" doris_tablet_schema_mem_bytes" );
43
45
inline bvar::Adder<int64_t > g_tablet_schema_num (" doris_tablet_schema_num" );
44
46
45
- inline bvar::Adder<int64_t > g_all_segments_mem_bytes (" doris_all_segments_mem_bytes" );
46
- inline bvar::Adder<int64_t > g_all_segments_num (" doris_all_segments_num" );
47
+ inline bvar::Adder<int64_t > g_segment_mem_bytes (" doris_segment_mem_bytes" );
48
+ inline bvar::Adder<int64_t > g_segment_num (" doris_segment_num" );
49
+ inline bvar::Adder<int64_t > g_segment_estimate_mem_bytes (" doris_segment_estimate_mem_bytes" );
47
50
48
51
inline bvar::Adder<int64_t > g_column_reader_mem_bytes (" doris_column_reader_mem_bytes" );
49
52
inline bvar::Adder<int64_t > g_column_reader_num (" doris_column_reader_num" );
@@ -96,6 +99,10 @@ class ZoneMapIndexReader;
96
99
When a derived Class extends MetadataAdder, then the Class's number and fixed length field's memory can be counted automatically.
97
100
But if the Class has variable length field, then you should overwrite get_metadata_size and call update_metadata_size when the Class's memory changes.
98
101
102
+ get_metadata_size is only the memory of the metadata object itself, not include child objects,
103
+ for example, TabletMeta::get_metadata_size does not include the memory of TabletSchema.
104
+ Note, the memory allocated by Doris Allocator is not included.
105
+
99
106
There are some special situations that need to be noted:
100
107
1. when the derived Class override copy constructor, you'd better update memory size(call update_metadata_size) if derived class's
101
108
memory changed in its copy constructor or you not call MetadataAdder's copy constructor.
@@ -111,6 +118,31 @@ class MetadataAdder {
111
118
112
119
static void dump_metadata_object (RuntimeProfile* object_heap_dump_snapshot);
113
120
121
+ static int64_t get_all_tablets_size () {
122
+ return g_tablet_meta_mem_bytes.get_value () + g_tablet_column_mem_bytes.get_value () +
123
+ g_tablet_index_mem_bytes.get_value () + g_tablet_schema_mem_bytes.get_value ();
124
+ }
125
+
126
+ static int64_t get_all_rowsets_size () {
127
+ return g_rowset_meta_mem_bytes.get_value () + g_rowset_mem_bytes.get_value ();
128
+ }
129
+
130
+ static int64_t get_all_segments_size () {
131
+ return g_segment_mem_bytes.get_value () + g_column_reader_mem_bytes.get_value () +
132
+ g_bitmap_index_reader_mem_bytes.get_value () +
133
+ g_bloom_filter_index_reader_mem_bytes.get_value () +
134
+ g_index_page_reader_mem_bytes.get_value () +
135
+ g_indexed_column_reader_mem_bytes.get_value () +
136
+ g_inverted_index_reader_mem_bytes.get_value () +
137
+ g_ordinal_index_reader_mem_bytes.get_value () +
138
+ g_zone_map_index_reader_mem_bytes.get_value ();
139
+ }
140
+
141
+ // Doris currently uses the estimated segments memory as the basis, maybe it is more realistic.
142
+ static int64_t get_all_segments_estimate_size () {
143
+ return g_segment_estimate_mem_bytes.get_value ();
144
+ }
145
+
114
146
protected:
115
147
MetadataAdder (const MetadataAdder& other);
116
148
@@ -122,7 +154,6 @@ class MetadataAdder {
122
154
123
155
MetadataAdder<T>& operator =(const MetadataAdder<T>& other) = default ;
124
156
125
- private:
126
157
int64_t _current_meta_size {0 };
127
158
128
159
void add_mem_size (int64_t val);
@@ -167,7 +198,7 @@ void MetadataAdder<T>::add_mem_size(int64_t val) {
167
198
if constexpr (std::is_same_v<T, RowsetMeta>) {
168
199
g_rowset_meta_mem_bytes << val;
169
200
} else if constexpr (std::is_same_v<T, Rowset>) {
170
- g_all_rowsets_mem_bytes << val;
201
+ g_rowset_mem_bytes << val;
171
202
} else if constexpr (std::is_same_v<T, TabletMeta>) {
172
203
g_tablet_meta_mem_bytes << val;
173
204
} else if constexpr (std::is_same_v<T, TabletColumn>) {
@@ -177,7 +208,7 @@ void MetadataAdder<T>::add_mem_size(int64_t val) {
177
208
} else if constexpr (std::is_same_v<T, TabletSchema>) {
178
209
g_tablet_schema_mem_bytes << val;
179
210
} else if constexpr (std::is_same_v<T, segment_v2::Segment>) {
180
- g_all_segments_mem_bytes << val;
211
+ g_segment_mem_bytes << val;
181
212
} else if constexpr (std::is_same_v<T, segment_v2::ColumnReader>) {
182
213
g_column_reader_mem_bytes << val;
183
214
} else if constexpr (std::is_same_v<T, segment_v2::BitmapIndexReader>) {
@@ -208,7 +239,7 @@ void MetadataAdder<T>::add_num(int64_t val) {
208
239
if constexpr (std::is_same_v<T, RowsetMeta>) {
209
240
g_rowset_meta_num << val;
210
241
} else if constexpr (std::is_same_v<T, Rowset>) {
211
- g_all_rowsets_num << val;
242
+ g_rowset_num << val;
212
243
} else if constexpr (std::is_same_v<T, TabletMeta>) {
213
244
g_tablet_meta_num << val;
214
245
} else if constexpr (std::is_same_v<T, TabletColumn>) {
@@ -218,7 +249,7 @@ void MetadataAdder<T>::add_num(int64_t val) {
218
249
} else if constexpr (std::is_same_v<T, TabletSchema>) {
219
250
g_tablet_schema_num << val;
220
251
} else if constexpr (std::is_same_v<T, segment_v2::Segment>) {
221
- g_all_segments_num << val;
252
+ g_segment_num << val;
222
253
} else if constexpr (std::is_same_v<T, segment_v2::ColumnReader>) {
223
254
g_column_reader_num << val;
224
255
} else if constexpr (std::is_same_v<T, segment_v2::BitmapIndexReader>) {
@@ -250,12 +281,12 @@ void MetadataAdder<T>::dump_metadata_object(RuntimeProfile* object_heap_dump_sna
250
281
COUNTER_SET (rowset_meta_mem_bytes_counter, g_rowset_meta_mem_bytes.get_value ());
251
282
COUNTER_SET (rowset_meta_num_counter, g_rowset_meta_num.get_value ());
252
283
253
- RuntimeProfile::Counter* all_rowsets_mem_bytes_counter =
254
- ADD_COUNTER (object_heap_dump_snapshot, " AllRowsetsMemBytes " , TUnit::BYTES);
255
- RuntimeProfile::Counter* all_rowsets_num_counter =
256
- ADD_COUNTER (object_heap_dump_snapshot, " AllRowsetsNum " , TUnit::UNIT);
257
- COUNTER_SET (all_rowsets_mem_bytes_counter, g_all_rowsets_mem_bytes .get_value ());
258
- COUNTER_SET (all_rowsets_num_counter, g_all_rowsets_num .get_value ());
284
+ RuntimeProfile::Counter* rowset_mem_bytes_counter =
285
+ ADD_COUNTER (object_heap_dump_snapshot, " RowsetMemBytes " , TUnit::BYTES);
286
+ RuntimeProfile::Counter* rowset_num_counter =
287
+ ADD_COUNTER (object_heap_dump_snapshot, " RowsetNum " , TUnit::UNIT);
288
+ COUNTER_SET (rowset_mem_bytes_counter, g_rowset_mem_bytes .get_value ());
289
+ COUNTER_SET (rowset_num_counter, g_rowset_num .get_value ());
259
290
260
291
RuntimeProfile::Counter* tablet_meta_mem_bytes_counter =
261
292
ADD_COUNTER (object_heap_dump_snapshot, " TabletMetaMemBytes" , TUnit::BYTES);
@@ -285,12 +316,12 @@ void MetadataAdder<T>::dump_metadata_object(RuntimeProfile* object_heap_dump_sna
285
316
COUNTER_SET (tablet_schema_mem_bytes_counter, g_tablet_schema_mem_bytes.get_value ());
286
317
COUNTER_SET (tablet_schema_num_counter, g_tablet_schema_num.get_value ());
287
318
288
- RuntimeProfile::Counter* all_segments_mem_bytes_counter =
289
- ADD_COUNTER (object_heap_dump_snapshot, " AllSegmentsMemBytes " , TUnit::BYTES);
290
- RuntimeProfile::Counter* all_segments_num_counter =
291
- ADD_COUNTER (object_heap_dump_snapshot, " AllSegmentsNum " , TUnit::UNIT);
292
- COUNTER_SET (all_segments_mem_bytes_counter, g_all_segments_mem_bytes .get_value ());
293
- COUNTER_SET (all_segments_num_counter, g_all_segments_num .get_value ());
319
+ RuntimeProfile::Counter* segment_mem_bytes_counter =
320
+ ADD_COUNTER (object_heap_dump_snapshot, " SegmentMemBytes " , TUnit::BYTES);
321
+ RuntimeProfile::Counter* segment_num_counter =
322
+ ADD_COUNTER (object_heap_dump_snapshot, " SegmentNum " , TUnit::UNIT);
323
+ COUNTER_SET (segment_mem_bytes_counter, g_segment_mem_bytes .get_value ());
324
+ COUNTER_SET (segment_num_counter, g_segment_num .get_value ());
294
325
295
326
RuntimeProfile::Counter* column_reader_mem_bytes_counter =
296
327
ADD_COUNTER (object_heap_dump_snapshot, " ColumnReaderMemBytes" , TUnit::BYTES);
0 commit comments