/Users/deen/code/yugabyte-db/src/yb/rocksdb/statistics.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
2 | | // This source code is licensed under the BSD-style license found in the |
3 | | // LICENSE file in the root directory of this source tree. An additional grant |
4 | | // of patent rights can be found in the PATENTS file in the same directory. |
5 | | // |
6 | | // The following only applies to changes made to this file as part of YugaByte development. |
7 | | // |
8 | | // Portions Copyright (c) YugaByte, Inc. |
9 | | // |
10 | | // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except |
11 | | // in compliance with the License. You may obtain a copy of the License at |
12 | | // |
13 | | // http://www.apache.org/licenses/LICENSE-2.0 |
14 | | // |
15 | | // Unless required by applicable law or agreed to in writing, software distributed under the License |
16 | | // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
17 | | // or implied. See the License for the specific language governing permissions and limitations |
18 | | // under the License. |
19 | | // |
20 | | |
21 | | #ifndef YB_ROCKSDB_STATISTICS_H |
22 | | #define YB_ROCKSDB_STATISTICS_H |
23 | | |
24 | | #include <atomic> |
25 | | #include <cstddef> |
26 | | #include <memory> |
27 | | #include <string> |
28 | | #include <vector> |
29 | | |
30 | | #include "yb/gutil/ref_counted.h" |
31 | | |
32 | | namespace yb { |
33 | | class MetricEntity; |
34 | | } |
35 | | |
36 | | namespace rocksdb { |
37 | | |
38 | | /** |
39 | | * Keep adding ticker's here. |
40 | | * 1. Any ticker should be added before TICKER_ENUM_MAX. |
41 | | * 2. Add a readable string in TickersNameMap below for the newly added ticker. |
42 | | */ |
43 | | enum Tickers : uint32_t { |
44 | | // total block cache misses |
45 | | // REQUIRES: BLOCK_CACHE_MISS == BLOCK_CACHE_INDEX_MISS + |
46 | | // BLOCK_CACHE_FILTER_MISS + |
47 | | // BLOCK_CACHE_DATA_MISS; |
48 | | BLOCK_CACHE_MISS = 0, |
49 | | // total block cache hit |
50 | | // REQUIRES: BLOCK_CACHE_HIT == BLOCK_CACHE_INDEX_HIT + |
51 | | // BLOCK_CACHE_FILTER_HIT + |
52 | | // BLOCK_CACHE_DATA_HIT; |
53 | | BLOCK_CACHE_HIT, |
54 | | // # of blocks added to block cache. |
55 | | BLOCK_CACHE_ADD, |
56 | | // # of failures when adding blocks to block cache. |
57 | | BLOCK_CACHE_ADD_FAILURES, |
58 | | // # of times cache miss when accessing index block from block cache. |
59 | | BLOCK_CACHE_INDEX_MISS, |
60 | | // # of times cache hit when accessing index block from block cache. |
61 | | BLOCK_CACHE_INDEX_HIT, |
62 | | // # of times cache miss when accessing filter block from block cache. |
63 | | BLOCK_CACHE_FILTER_MISS, |
64 | | // # of times cache hit when accessing filter block from block cache. |
65 | | BLOCK_CACHE_FILTER_HIT, |
66 | | // # of times cache miss when accessing data block from block cache. |
67 | | BLOCK_CACHE_DATA_MISS, |
68 | | // # of times cache hit when accessing data block from block cache. |
69 | | BLOCK_CACHE_DATA_HIT, |
70 | | // # of bytes read from cache. |
71 | | BLOCK_CACHE_BYTES_READ, |
72 | | // # of bytes written into cache. |
73 | | BLOCK_CACHE_BYTES_WRITE, |
74 | | // # of times bloom filter has avoided file reads. |
75 | | BLOOM_FILTER_USEFUL, |
76 | | // # of times bloom filter has been checked. |
77 | | BLOOM_FILTER_CHECKED, |
78 | | |
79 | | // # of memtable hits. |
80 | | MEMTABLE_HIT, |
81 | | // # of memtable misses. |
82 | | MEMTABLE_MISS, |
83 | | |
84 | | // # of Get() queries served by L0 |
85 | | GET_HIT_L0, |
86 | | // # of Get() queries served by L1 |
87 | | GET_HIT_L1, |
88 | | // # of Get() queries served by L2 and up |
89 | | GET_HIT_L2_AND_UP, |
90 | | |
91 | | /** |
92 | | * COMPACTION_KEY_DROP_* count the reasons for key drop during compaction |
93 | | * There are 3 reasons currently. |
94 | | */ |
95 | | COMPACTION_KEY_DROP_NEWER_ENTRY, // key was written with a newer value. |
96 | | COMPACTION_KEY_DROP_OBSOLETE, // The key is obsolete. |
97 | | COMPACTION_KEY_DROP_USER, // user compaction function has dropped the key. |
98 | | |
99 | | // Number of keys written to the database via the Put and Write call's |
100 | | NUMBER_KEYS_WRITTEN, |
101 | | // Number of Keys read, |
102 | | NUMBER_KEYS_READ, |
103 | | // Number keys updated, if inplace update is enabled |
104 | | NUMBER_KEYS_UPDATED, |
105 | | // The number of uncompressed bytes issued by DB::Put(), DB::Delete(), |
106 | | // DB::Merge(), and DB::Write(). |
107 | | BYTES_WRITTEN, |
108 | | // The number of uncompressed bytes read from DB::Get(). It could be |
109 | | // either from memtables, cache, or table files. |
110 | | // For the number of logical bytes read from DB::MultiGet(), |
111 | | // please use NUMBER_MULTIGET_BYTES_READ. |
112 | | BYTES_READ, |
113 | | // The number of calls to seek/next/prev |
114 | | NUMBER_DB_SEEK, |
115 | | NUMBER_DB_NEXT, |
116 | | NUMBER_DB_PREV, |
117 | | // The number of calls to seek/next/prev that returned data |
118 | | NUMBER_DB_SEEK_FOUND, |
119 | | NUMBER_DB_NEXT_FOUND, |
120 | | NUMBER_DB_PREV_FOUND, |
121 | | // The number of uncompressed bytes read from an iterator. |
122 | | // Includes size of key and value. |
123 | | ITER_BYTES_READ, |
124 | | NO_FILE_CLOSES, |
125 | | NO_FILE_OPENS, |
126 | | NO_FILE_ERRORS, |
127 | | // DEPRECATED Time system had to wait to do LO-L1 compactions |
128 | | STALL_L0_SLOWDOWN_MICROS, |
129 | | // DEPRECATED Time system had to wait to move memtable to L1. |
130 | | STALL_MEMTABLE_COMPACTION_MICROS, |
131 | | // DEPRECATED write throttle because of too many files in L0 |
132 | | STALL_L0_NUM_FILES_MICROS, |
133 | | // Writer has to wait for compaction or flush to finish. |
134 | | STALL_MICROS, |
135 | | // The wait time for db mutex. |
136 | | // Disabled by default. To enable it set stats level to kAll |
137 | | DB_MUTEX_WAIT_MICROS, |
138 | | RATE_LIMIT_DELAY_MILLIS, |
139 | | NO_ITERATORS, // number of iterators currently open |
140 | | |
141 | | // Number of MultiGet calls, keys read, and bytes read |
142 | | NUMBER_MULTIGET_CALLS, |
143 | | NUMBER_MULTIGET_KEYS_READ, |
144 | | NUMBER_MULTIGET_BYTES_READ, |
145 | | |
146 | | // Number of deletes records that were not required to be |
147 | | // written to storage because key does not exist |
148 | | NUMBER_FILTERED_DELETES, |
149 | | NUMBER_MERGE_FAILURES, |
150 | | SEQUENCE_NUMBER, |
151 | | |
152 | | // number of times bloom was checked before creating iterator on a |
153 | | // file, and the number of times the check was useful in avoiding |
154 | | // iterator creation (and thus likely IOPs). |
155 | | BLOOM_FILTER_PREFIX_CHECKED, |
156 | | BLOOM_FILTER_PREFIX_USEFUL, |
157 | | |
158 | | // Number of times we had to reseek inside an iteration to skip |
159 | | // over large number of keys with same userkey. |
160 | | NUMBER_OF_RESEEKS_IN_ITERATION, |
161 | | |
162 | | // Record the number of calls to GetUpadtesSince. Useful to keep track of |
163 | | // transaction log iterator refreshes |
164 | | GET_UPDATES_SINCE_CALLS, |
165 | | BLOCK_CACHE_COMPRESSED_MISS, // miss in the compressed block cache |
166 | | BLOCK_CACHE_COMPRESSED_HIT, // hit in the compressed block cache |
167 | | // Number of blocks added to comopressed block cache |
168 | | BLOCK_CACHE_COMPRESSED_ADD, |
169 | | // Number of failures when adding blocks to compressed block cache |
170 | | BLOCK_CACHE_COMPRESSED_ADD_FAILURES, |
171 | | WAL_FILE_SYNCED, // Number of times WAL sync is done |
172 | | WAL_FILE_BYTES, // Number of bytes written to WAL |
173 | | |
174 | | // Writes can be processed by requesting thread or by the thread at the |
175 | | // head of the writers queue. |
176 | | WRITE_DONE_BY_SELF, |
177 | | WRITE_DONE_BY_OTHER, // Equivalent to writes done for others |
178 | | WRITE_WITH_WAL, // Number of Write calls that request WAL |
179 | | COMPACT_READ_BYTES, // Bytes read during compaction |
180 | | COMPACT_WRITE_BYTES, // Bytes written during compaction |
181 | | FLUSH_WRITE_BYTES, // Bytes written during flush |
182 | | |
183 | | // Number of table's properties loaded directly from file, without creating |
184 | | // table reader object. |
185 | | NUMBER_DIRECT_LOAD_TABLE_PROPERTIES, |
186 | | NUMBER_SUPERVERSION_ACQUIRES, |
187 | | NUMBER_SUPERVERSION_RELEASES, |
188 | | NUMBER_SUPERVERSION_CLEANUPS, |
189 | | NUMBER_BLOCK_NOT_COMPRESSED, |
190 | | // Size of all the SST Files for the current version. |
191 | | CURRENT_VERSION_SST_FILES_SIZE, |
192 | | OLD_BK_COMPAT_CURRENT_VERSION_SST_FILES_SIZE, |
193 | | CURRENT_VERSION_SST_FILES_UNCOMPRESSED_SIZE, |
194 | | CURRENT_VERSION_NUM_SST_FILES, |
195 | | MERGE_OPERATION_TOTAL_TIME, |
196 | | FILTER_OPERATION_TOTAL_TIME, |
197 | | |
198 | | // Row cache. |
199 | | ROW_CACHE_HIT, |
200 | | ROW_CACHE_MISS, |
201 | | |
202 | | // Table cache. |
203 | | NO_TABLE_CACHE_ITERATORS, |
204 | | |
205 | | // Single-touch and multi-touch statistics. |
206 | | BLOCK_CACHE_SINGLE_TOUCH_HIT, |
207 | | BLOCK_CACHE_SINGLE_TOUCH_ADD, |
208 | | BLOCK_CACHE_SINGLE_TOUCH_BYTES_READ, |
209 | | BLOCK_CACHE_SINGLE_TOUCH_BYTES_WRITE, |
210 | | BLOCK_CACHE_MULTI_TOUCH_HIT, |
211 | | BLOCK_CACHE_MULTI_TOUCH_ADD, |
212 | | BLOCK_CACHE_MULTI_TOUCH_BYTES_READ, |
213 | | BLOCK_CACHE_MULTI_TOUCH_BYTES_WRITE, |
214 | | |
215 | | // Files filtered during compaction due to TTL expiration |
216 | | COMPACTION_FILES_FILTERED, |
217 | | COMPACTION_FILES_NOT_FILTERED, |
218 | | |
219 | | // End of ticker enum. |
220 | | TICKER_ENUM_MAX, |
221 | | }; |
222 | | |
223 | | // The order of items listed in Tickers should be the same as |
224 | | // the order listed in TickersNameMap |
225 | | const std::vector<std::pair<Tickers, std::string>> TickersNameMap = { |
226 | | {BLOCK_CACHE_MISS, "rocksdb_block_cache_miss"}, |
227 | | {BLOCK_CACHE_HIT, "rocksdb_block_cache_hit"}, |
228 | | {BLOCK_CACHE_ADD, "rocksdb_block_cache_add"}, |
229 | | {BLOCK_CACHE_ADD_FAILURES, "rocksdb_block_cache_add_failures"}, |
230 | | {BLOCK_CACHE_INDEX_MISS, "rocksdb_block_cache_index_miss"}, |
231 | | {BLOCK_CACHE_INDEX_HIT, "rocksdb_block_cache_index_hit"}, |
232 | | {BLOCK_CACHE_FILTER_MISS, "rocksdb_block_cache_filter_miss"}, |
233 | | {BLOCK_CACHE_FILTER_HIT, "rocksdb_block_cache_filter_hit"}, |
234 | | {BLOCK_CACHE_DATA_MISS, "rocksdb_block_cache_data_miss"}, |
235 | | {BLOCK_CACHE_DATA_HIT, "rocksdb_block_cache_data_hit"}, |
236 | | {BLOCK_CACHE_BYTES_READ, "rocksdb_block_cache_bytes_read"}, |
237 | | {BLOCK_CACHE_BYTES_WRITE, "rocksdb_block_cache_bytes_write"}, |
238 | | {BLOOM_FILTER_USEFUL, "rocksdb_bloom_filter_useful"}, |
239 | | {BLOOM_FILTER_CHECKED, "rocksdb_bloom_filter_checked"}, |
240 | | {MEMTABLE_HIT, "rocksdb_memtable_hit"}, |
241 | | {MEMTABLE_MISS, "rocksdb_memtable_miss"}, |
242 | | {GET_HIT_L0, "rocksdb_l0_hit"}, |
243 | | {GET_HIT_L1, "rocksdb_l1_hit"}, |
244 | | {GET_HIT_L2_AND_UP, "rocksdb_l2andup_hit"}, |
245 | | {COMPACTION_KEY_DROP_NEWER_ENTRY, "rocksdb_compaction_key_drop_new"}, |
246 | | {COMPACTION_KEY_DROP_OBSOLETE, "rocksdb_compaction_key_drop_obsolete"}, |
247 | | {COMPACTION_KEY_DROP_USER, "rocksdb_compaction_key_drop_user"}, |
248 | | {NUMBER_KEYS_WRITTEN, "rocksdb_number_keys_written"}, |
249 | | {NUMBER_KEYS_READ, "rocksdb_number_keys_read"}, |
250 | | {NUMBER_KEYS_UPDATED, "rocksdb_number_keys_updated"}, |
251 | | {BYTES_WRITTEN, "rocksdb_bytes_written"}, |
252 | | {BYTES_READ, "rocksdb_bytes_read"}, |
253 | | {NUMBER_DB_SEEK, "rocksdb_number_db_seek"}, |
254 | | {NUMBER_DB_NEXT, "rocksdb_number_db_next"}, |
255 | | {NUMBER_DB_PREV, "rocksdb_number_db_prev"}, |
256 | | {NUMBER_DB_SEEK_FOUND, "rocksdb_number_db_seek_found"}, |
257 | | {NUMBER_DB_NEXT_FOUND, "rocksdb_number_db_next_found"}, |
258 | | {NUMBER_DB_PREV_FOUND, "rocksdb_number_db_prev_found"}, |
259 | | {ITER_BYTES_READ, "rocksdb_db_iter_bytes_read"}, |
260 | | {NO_FILE_CLOSES, "rocksdb_no_file_closes"}, |
261 | | {NO_FILE_OPENS, "rocksdb_no_file_opens"}, |
262 | | {NO_FILE_ERRORS, "rocksdb_no_file_errors"}, |
263 | | {STALL_L0_SLOWDOWN_MICROS, "rocksdb_l0_slowdown_micros"}, |
264 | | {STALL_MEMTABLE_COMPACTION_MICROS, "rocksdb_memtable_compaction_micros"}, |
265 | | {STALL_L0_NUM_FILES_MICROS, "rocksdb_l0_num_files_stall_micros"}, |
266 | | {STALL_MICROS, "rocksdb_stall_micros"}, |
267 | | {DB_MUTEX_WAIT_MICROS, "rocksdb_db_mutex_wait_micros"}, |
268 | | {RATE_LIMIT_DELAY_MILLIS, "rocksdb_rate_limit_delay_millis"}, |
269 | | {NO_ITERATORS, "rocksdb_num_iterators"}, |
270 | | {NUMBER_MULTIGET_CALLS, "rocksdb_number_multiget_get"}, |
271 | | {NUMBER_MULTIGET_KEYS_READ, "rocksdb_number_multiget_keys_read"}, |
272 | | {NUMBER_MULTIGET_BYTES_READ, "rocksdb_number_multiget_bytes_read"}, |
273 | | {NUMBER_FILTERED_DELETES, "rocksdb_number_deletes_filtered"}, |
274 | | {NUMBER_MERGE_FAILURES, "rocksdb_number_merge_failures"}, |
275 | | {SEQUENCE_NUMBER, "rocksdb_sequence_number"}, |
276 | | {BLOOM_FILTER_PREFIX_CHECKED, "rocksdb_bloom_filter_prefix_checked"}, |
277 | | {BLOOM_FILTER_PREFIX_USEFUL, "rocksdb_bloom_filter_prefix_useful"}, |
278 | | {NUMBER_OF_RESEEKS_IN_ITERATION, "rocksdb_number_reseeks_iteration"}, |
279 | | {GET_UPDATES_SINCE_CALLS, "rocksdb_getupdatessince_calls"}, |
280 | | {BLOCK_CACHE_COMPRESSED_MISS, "rocksdb_block_cachecompressed_miss"}, |
281 | | {BLOCK_CACHE_COMPRESSED_HIT, "rocksdb_block_cachecompressed_hit"}, |
282 | | {BLOCK_CACHE_COMPRESSED_ADD, "rocksdb_block_cachecompressed_add"}, |
283 | | {BLOCK_CACHE_COMPRESSED_ADD_FAILURES, |
284 | | "rocksdb_block_cachecompressed_add_failures"}, |
285 | | {WAL_FILE_SYNCED, "rocksdb_wal_synced"}, |
286 | | {WAL_FILE_BYTES, "rocksdb_wal_bytes"}, |
287 | | {WRITE_DONE_BY_SELF, "rocksdb_write_self"}, |
288 | | {WRITE_DONE_BY_OTHER, "rocksdb_write_other"}, |
289 | | {WRITE_WITH_WAL, "rocksdb_write_wal"}, |
290 | | {COMPACT_READ_BYTES, "rocksdb_compact_read_bytes"}, |
291 | | {COMPACT_WRITE_BYTES, "rocksdb_compact_write_bytes"}, |
292 | | {FLUSH_WRITE_BYTES, "rocksdb_flush_write_bytes"}, |
293 | | {NUMBER_DIRECT_LOAD_TABLE_PROPERTIES, |
294 | | "rocksdb_number_direct_load_table_properties"}, |
295 | | {NUMBER_SUPERVERSION_ACQUIRES, "rocksdb_number_superversion_acquires"}, |
296 | | {NUMBER_SUPERVERSION_RELEASES, "rocksdb_number_superversion_releases"}, |
297 | | {NUMBER_SUPERVERSION_CLEANUPS, "rocksdb_number_superversion_cleanups"}, |
298 | | {NUMBER_BLOCK_NOT_COMPRESSED, "rocksdb_number_block_not_compressed"}, |
299 | | {CURRENT_VERSION_SST_FILES_SIZE, "rocksdb_current_version_sst_files_size"}, |
300 | | {OLD_BK_COMPAT_CURRENT_VERSION_SST_FILES_SIZE, "rocksdb_total_sst_files_size"}, |
301 | | |
302 | | {CURRENT_VERSION_SST_FILES_UNCOMPRESSED_SIZE, |
303 | | "rocksdb_current_version_sst_files_uncompressed_size"}, |
304 | | |
305 | | {CURRENT_VERSION_NUM_SST_FILES, "rocksdb_current_version_num_sst_files"}, |
306 | | {MERGE_OPERATION_TOTAL_TIME, "rocksdb_merge_operation_time_nanos"}, |
307 | | {FILTER_OPERATION_TOTAL_TIME, "rocksdb_filter_operation_time_nanos"}, |
308 | | {ROW_CACHE_HIT, "rocksdb_row_cache_hit"}, |
309 | | {ROW_CACHE_MISS, "rocksdb_row_cache_miss"}, |
310 | | {NO_TABLE_CACHE_ITERATORS, "rocksdb_no_table_cache_iterators"}, |
311 | | {BLOCK_CACHE_SINGLE_TOUCH_HIT, "rocksdb_block_cache_single_touch_hit"}, |
312 | | {BLOCK_CACHE_SINGLE_TOUCH_ADD, "rocksdb_block_cache_single_touch_add"}, |
313 | | {BLOCK_CACHE_SINGLE_TOUCH_BYTES_READ, "rocksdb_block_cache_single_touch_bytes_read"}, |
314 | | {BLOCK_CACHE_SINGLE_TOUCH_BYTES_WRITE, "rocksdb_block_cache_single_touch_bytes_write"}, |
315 | | {BLOCK_CACHE_MULTI_TOUCH_HIT, "rocksdb_block_cache_multi_touch_hit"}, |
316 | | {BLOCK_CACHE_MULTI_TOUCH_ADD, "rocksdb_block_cache_multi_touch_add"}, |
317 | | {BLOCK_CACHE_MULTI_TOUCH_BYTES_READ, "rocksdb_block_cache_multi_touch_bytes_read"}, |
318 | | {BLOCK_CACHE_MULTI_TOUCH_BYTES_WRITE, "rocksdb_block_cache_multi_touch_bytes_write"}, |
319 | | |
320 | | {COMPACTION_FILES_FILTERED, "rocksdb_compaction_files_filtered"}, |
321 | | {COMPACTION_FILES_NOT_FILTERED, "rocksdb_compaction_files_not_filtered"}, |
322 | | }; |
323 | | |
324 | | /** |
325 | | * Keep adding histogram's here. |
326 | | * Any histogram whould have value less than HISTOGRAM_ENUM_MAX |
327 | | * Add a new Histogram by assigning it the current value of HISTOGRAM_ENUM_MAX |
328 | | * Add a string representation in HistogramsNameMap below |
329 | | * And increment HISTOGRAM_ENUM_MAX |
330 | | */ |
331 | | enum Histograms : uint32_t { |
332 | | DB_GET = 0, |
333 | | DB_WRITE, |
334 | | COMPACTION_TIME, |
335 | | WAL_FILE_SYNC_MICROS, |
336 | | DB_MULTIGET, |
337 | | READ_BLOCK_COMPACTION_MICROS, |
338 | | READ_BLOCK_GET_MICROS, |
339 | | WRITE_RAW_BLOCK_MICROS, |
340 | | NUM_FILES_IN_SINGLE_COMPACTION, |
341 | | DB_SEEK, |
342 | | SST_READ_MICROS, |
343 | | // Value size distribution in each operation |
344 | | BYTES_PER_READ, |
345 | | BYTES_PER_WRITE, |
346 | | BYTES_PER_MULTIGET, |
347 | | HISTOGRAM_ENUM_MAX, // TODO(ldemailly): enforce HistogramsNameMap match |
348 | | }; |
349 | | |
350 | | const std::vector<std::pair<Histograms, std::string>> HistogramsNameMap = { |
351 | | {DB_GET, "rocksdb_db_get_micros"}, |
352 | | {DB_WRITE, "rocksdb_db_write_micros"}, |
353 | | {COMPACTION_TIME, "rocksdb_compaction_times_micros"}, |
354 | | {WAL_FILE_SYNC_MICROS, "rocksdb_wal_file_sync_micros"}, |
355 | | {DB_MULTIGET, "rocksdb_db_multiget_micros"}, |
356 | | {READ_BLOCK_COMPACTION_MICROS, "rocksdb_read_block_compaction_micros"}, |
357 | | {READ_BLOCK_GET_MICROS, "rocksdb_read_block_get_micros"}, |
358 | | {WRITE_RAW_BLOCK_MICROS, "rocksdb_write_raw_block_micros"}, |
359 | | {NUM_FILES_IN_SINGLE_COMPACTION, "rocksdb_numfiles_in_singlecompaction"}, |
360 | | {DB_SEEK, "rocksdb_db_seek_micros"}, |
361 | | {SST_READ_MICROS, "rocksdb_sst_read_micros"}, |
362 | | {BYTES_PER_READ, "rocksdb_bytes_per_read"}, |
363 | | {BYTES_PER_WRITE, "rocksdb_bytes_per_write"}, |
364 | | {BYTES_PER_MULTIGET, "rocksdb_bytes_per_multiget"}, |
365 | | }; |
366 | | |
367 | | struct HistogramData { |
368 | | double count; |
369 | | double min; |
370 | | double max; |
371 | | double sum; |
372 | | double median; |
373 | | double percentile95; |
374 | | double percentile99; |
375 | | double average; |
376 | | double standard_deviation; |
377 | | }; |
378 | | |
379 | | enum StatsLevel { |
380 | | // Collect all stats except the counters requiring to get time inside the |
381 | | // mutex lock. |
382 | | kExceptTimeForMutex, |
383 | | // Collect all stats, including measuring duration of mutex operations. |
384 | | // If getting time is expensive on the platform to run, it can |
385 | | // reduce scalability to more threads, especialy for writes. |
386 | | kAll, |
387 | | }; |
388 | | |
389 | | // Analyze the performance of a db |
390 | | class Statistics { |
391 | | public: |
392 | 95.7k | virtual ~Statistics() {} |
393 | | |
394 | | virtual uint64_t getTickerCount(uint32_t tickerType) const = 0; |
395 | | virtual void histogramData(uint32_t type, |
396 | | HistogramData* const data) const = 0; |
397 | 0 | virtual std::string getHistogramString(uint32_t type) const { return ""; } |
398 | | virtual void recordTick(uint32_t tickerType, uint64_t count = 0) = 0; |
399 | | virtual void setTickerCount(uint32_t tickerType, uint64_t count) = 0; |
400 | | virtual void measureTime(uint32_t histogramType, uint64_t time) = 0; |
401 | | virtual void resetTickersForTest() = 0; |
402 | | |
403 | | // String representation of the statistic object. |
404 | 0 | virtual std::string ToString() const { |
405 | 0 | // Do nothing by default |
406 | 0 | return std::string("ToString(): not implemented"); |
407 | 0 | } |
408 | | |
409 | | // Override this function to disable particular histogram collection |
410 | 7.88M | virtual bool HistEnabledForType(uint32_t type) const { |
411 | 7.88M | return type < HISTOGRAM_ENUM_MAX; |
412 | 7.88M | } |
413 | | |
414 | | StatsLevel stats_level_ = kExceptTimeForMutex; |
415 | | }; |
416 | | |
417 | | // Create a concrete DBStatistics object |
418 | | std::shared_ptr<Statistics> CreateDBStatistics( |
419 | | const scoped_refptr<yb::MetricEntity>& hist_entity, |
420 | | const scoped_refptr<yb::MetricEntity>& tick_entity, |
421 | | const bool for_intents = false); |
422 | | std::shared_ptr<Statistics> CreateDBStatisticsForTests(bool for_intents = false); |
423 | | |
424 | | } // namespace rocksdb |
425 | | |
426 | | #endif // YB_ROCKSDB_STATISTICS_H |