YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/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