internal_stats.h 22.4 KB
Newer Older
1
//  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
S
Siying Dong 已提交
2 3 4
//  This source code is licensed under both the GPLv2 (found in the
//  COPYING file in the root directory) and Apache 2.0 License
//  (found in the LICENSE.Apache file in the root directory).
I
Igor Canadi 已提交
5 6 7 8 9 10 11
//
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
//

#pragma once
12
#include <map>
I
Igor Canadi 已提交
13
#include <string>
14 15 16
#include <vector>

#include "db/version_set.h"
I
Igor Canadi 已提交
17

18 19
class ColumnFamilyData;

I
Igor Canadi 已提交
20
namespace rocksdb {
21 22

class MemTableList;
23
class DBImpl;
24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
// Config for retrieving a property's value.
struct DBPropertyInfo {
  bool need_out_of_mutex;

  // gcc had an internal error for initializing union of pointer-to-member-
  // functions. Workaround is to populate exactly one of the following function
  // pointers with a non-nullptr value.

  // @param value Value-result argument for storing the property's string value
  // @param suffix Argument portion of the property. For example, suffix would
  //      be "5" for the property "rocksdb.num-files-at-level5". So far, only
  //      certain string properties take an argument.
  bool (InternalStats::*handle_string)(std::string* value, Slice suffix);

  // @param value Value-result argument for storing the property's uint64 value
  // @param db Many of the int properties rely on DBImpl methods.
  // @param version Version is needed in case the property is retrieved without
  //      holding db mutex, which is only supported for int properties.
  bool (InternalStats::*handle_int)(uint64_t* value, DBImpl* db,
                                    Version* version);
45 46 47

  // @param props Map of general properties to populate
  bool (InternalStats::*handle_map)(std::map<std::string, std::string>* props);
48 49
};

50
extern const DBPropertyInfo* GetPropertyInfo(const Slice& property);
51 52

#ifndef ROCKSDB_LITE
T
Tomas Kolda 已提交
53
#undef SCORE
54 55 56 57
enum class LevelStatType {
  INVALID = 0,
  NUM_FILES,
  COMPACTED_FILES,
58
  SIZE_BYTES,
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
  SCORE,
  READ_GB,
  RN_GB,
  RNP1_GB,
  WRITE_GB,
  W_NEW_GB,
  MOVED_GB,
  WRITE_AMP,
  READ_MBPS,
  WRITE_MBPS,
  COMP_SEC,
  COMP_COUNT,
  AVG_SEC,
  KEY_IN,
  KEY_DROP,
  TOTAL  // total number of types
};

struct LevelStat {
  // This what will be L?.property_name in the flat map returned to the user
  std::string property_name;
  // This will be what we will print in the header in the cli
  std::string header_name;
};

I
Igor Canadi 已提交
84 85
class InternalStats {
 public:
86 87
  static const std::map<LevelStatType, LevelStat> compaction_level_stats;

88
  enum InternalCFStatsType {
89 90 91 92 93 94 95 96
    L0_FILE_COUNT_LIMIT_SLOWDOWNS,
    LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS,
    MEMTABLE_LIMIT_STOPS,
    MEMTABLE_LIMIT_SLOWDOWNS,
    L0_FILE_COUNT_LIMIT_STOPS,
    LOCKED_L0_FILE_COUNT_LIMIT_STOPS,
    PENDING_COMPACTION_BYTES_LIMIT_SLOWDOWNS,
    PENDING_COMPACTION_BYTES_LIMIT_STOPS,
I
Igor Canadi 已提交
97
    WRITE_STALLS_ENUM_MAX,
98
    BYTES_FLUSHED,
99
    BYTES_INGESTED_ADD_FILE,
100 101 102
    INGESTED_NUM_FILES_TOTAL,
    INGESTED_LEVEL0_NUM_FILES_TOTAL,
    INGESTED_NUM_KEYS_TOTAL,
103
    INTERNAL_CF_STATS_ENUM_MAX,
I
Igor Canadi 已提交
104 105
  };

106 107 108 109
  enum InternalDBStatsType {
    WAL_FILE_BYTES,
    WAL_FILE_SYNCED,
    BYTES_WRITTEN,
S
sdong 已提交
110
    NUMBER_KEYS_WRITTEN,
111 112 113
    WRITE_DONE_BY_OTHER,
    WRITE_DONE_BY_SELF,
    WRITE_WITH_WAL,
S
sdong 已提交
114
    WRITE_STALL_MICROS,
115 116 117
    INTERNAL_DB_STATS_ENUM_MAX,
  };

118
  InternalStats(int num_levels, Env* env, ColumnFamilyData* cfd)
119 120 121
      : db_stats_{},
        cf_stats_value_{},
        cf_stats_count_{},
122
        comp_stats_(num_levels),
123
        file_read_latency_(num_levels),
124
        bg_error_count_(0),
I
Igor Canadi 已提交
125 126
        number_levels_(num_levels),
        env_(env),
127
        cfd_(cfd),
128
        started_at_(env->NowMicros()) {}
I
Igor Canadi 已提交
129

130
  // Per level compaction stats.  comp_stats_[level] stores the stats for
I
Igor Canadi 已提交
131 132 133 134
  // compactions that produced data for the specified "level".
  struct CompactionStats {
    uint64_t micros;

135 136
    // The number of bytes read from all non-output levels
    uint64_t bytes_read_non_output_levels;
I
Igor Canadi 已提交
137

138 139
    // The number of bytes read from the compaction output level.
    uint64_t bytes_read_output_level;
I
Igor Canadi 已提交
140

141
    // Total number of bytes written during compaction
142
    uint64_t bytes_written;
I
Igor Canadi 已提交
143

144
    // Total number of bytes moved to the output level
145 146
    uint64_t bytes_moved;

147 148
    // The number of compaction input files in all non-output levels.
    int num_input_files_in_non_output_levels;
I
Igor Canadi 已提交
149

150 151
    // The number of compaction input files in the output level.
    int num_input_files_in_output_level;
I
Igor Canadi 已提交
152

153 154
    // The number of compaction output files.
    int num_output_files;
I
Igor Canadi 已提交
155

156
    // Total incoming entries during compaction between levels N and N+1
S
sdong 已提交
157
    uint64_t num_input_records;
158 159 160

    // Accumulated diff number of entries
    // (num input entries - num output entires) for compaction  levels N and N+1
S
sdong 已提交
161
    uint64_t num_dropped_records;
162

I
Igor Canadi 已提交
163 164 165
    // Number of compactions done
    int count;

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
    // Number of compactions done per CompactionReason
    int counts[static_cast<int>(CompactionReason::kNumOfReasons)];

    explicit CompactionStats()
        : micros(0),
          bytes_read_non_output_levels(0),
          bytes_read_output_level(0),
          bytes_written(0),
          bytes_moved(0),
          num_input_files_in_non_output_levels(0),
          num_input_files_in_output_level(0),
          num_output_files(0),
          num_input_records(0),
          num_dropped_records(0),
          count(0) {
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i < num_of_reasons; i++) {
        counts[i] = 0;
      }
    }

    explicit CompactionStats(CompactionReason reason, int c)
I
Igor Canadi 已提交
188
        : micros(0),
189 190
          bytes_read_non_output_levels(0),
          bytes_read_output_level(0),
I
Igor Canadi 已提交
191
          bytes_written(0),
192
          bytes_moved(0),
193 194 195
          num_input_files_in_non_output_levels(0),
          num_input_files_in_output_level(0),
          num_output_files(0),
196 197
          num_input_records(0),
          num_dropped_records(0),
198 199 200 201 202 203 204 205 206 207 208 209
          count(c) {
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i < num_of_reasons; i++) {
        counts[i] = 0;
      }
      int r = static_cast<int>(reason);
      if (r >= 0 && r < num_of_reasons) {
        counts[r] = c;
      } else {
        count = 0;
      }
    }
I
Igor Canadi 已提交
210

211 212
    explicit CompactionStats(const CompactionStats& c)
        : micros(c.micros),
213 214
          bytes_read_non_output_levels(c.bytes_read_non_output_levels),
          bytes_read_output_level(c.bytes_read_output_level),
215
          bytes_written(c.bytes_written),
216
          bytes_moved(c.bytes_moved),
217 218 219 220 221
          num_input_files_in_non_output_levels(
              c.num_input_files_in_non_output_levels),
          num_input_files_in_output_level(
              c.num_input_files_in_output_level),
          num_output_files(c.num_output_files),
222 223
          num_input_records(c.num_input_records),
          num_dropped_records(c.num_dropped_records),
224 225 226 227 228 229
          count(c.count) {
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i < num_of_reasons; i++) {
        counts[i] = c.counts[i];
      }
    }
230

S
Siying Dong 已提交
231 232 233 234 235 236 237 238 239 240 241 242
    void Clear() {
      this->micros = 0;
      this->bytes_read_non_output_levels = 0;
      this->bytes_read_output_level = 0;
      this->bytes_written = 0;
      this->bytes_moved = 0;
      this->num_input_files_in_non_output_levels = 0;
      this->num_input_files_in_output_level = 0;
      this->num_output_files = 0;
      this->num_input_records = 0;
      this->num_dropped_records = 0;
      this->count = 0;
243 244 245 246
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i < num_of_reasons; i++) {
        counts[i] = 0;
      }
S
Siying Dong 已提交
247 248
    }

I
Igor Canadi 已提交
249 250
    void Add(const CompactionStats& c) {
      this->micros += c.micros;
251 252
      this->bytes_read_non_output_levels += c.bytes_read_non_output_levels;
      this->bytes_read_output_level += c.bytes_read_output_level;
I
Igor Canadi 已提交
253
      this->bytes_written += c.bytes_written;
254
      this->bytes_moved += c.bytes_moved;
255 256 257 258 259
      this->num_input_files_in_non_output_levels +=
          c.num_input_files_in_non_output_levels;
      this->num_input_files_in_output_level +=
          c.num_input_files_in_output_level;
      this->num_output_files += c.num_output_files;
260 261
      this->num_input_records += c.num_input_records;
      this->num_dropped_records += c.num_dropped_records;
L
Lei Jin 已提交
262
      this->count += c.count;
263 264 265 266
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i< num_of_reasons; i++) {
        counts[i] += c.counts[i];
      }
I
Igor Canadi 已提交
267
    }
268 269 270

    void Subtract(const CompactionStats& c) {
      this->micros -= c.micros;
271 272
      this->bytes_read_non_output_levels -= c.bytes_read_non_output_levels;
      this->bytes_read_output_level -= c.bytes_read_output_level;
273
      this->bytes_written -= c.bytes_written;
274
      this->bytes_moved -= c.bytes_moved;
275 276 277 278 279
      this->num_input_files_in_non_output_levels -=
          c.num_input_files_in_non_output_levels;
      this->num_input_files_in_output_level -=
          c.num_input_files_in_output_level;
      this->num_output_files -= c.num_output_files;
280 281
      this->num_input_records -= c.num_input_records;
      this->num_dropped_records -= c.num_dropped_records;
282
      this->count -= c.count;
283 284 285 286
      int num_of_reasons = static_cast<int>(CompactionReason::kNumOfReasons);
      for (int i = 0; i < num_of_reasons; i++) {
        counts[i] -= c.counts[i];
      }
287
    }
I
Igor Canadi 已提交
288 289
  };

S
Siying Dong 已提交
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
  void Clear() {
    for (int i = 0; i < INTERNAL_DB_STATS_ENUM_MAX; i++) {
      db_stats_[i].store(0);
    }
    for (int i = 0; i < INTERNAL_CF_STATS_ENUM_MAX; i++) {
      cf_stats_count_[i] = 0;
      cf_stats_value_[i] = 0;
    }
    for (auto& comp_stat : comp_stats_) {
      comp_stat.Clear();
    }
    for (auto& h : file_read_latency_) {
      h.Clear();
    }
    cf_stats_snapshot_.Clear();
    db_stats_snapshot_.Clear();
    bg_error_count_ = 0;
    started_at_ = env_->NowMicros();
  }

I
Igor Canadi 已提交
310
  void AddCompactionStats(int level, const CompactionStats& stats) {
311
    comp_stats_[level].Add(stats);
I
Igor Canadi 已提交
312 313
  }

314 315 316 317
  void IncBytesMoved(int level, uint64_t amount) {
    comp_stats_[level].bytes_moved += amount;
  }

318 319 320
  void AddCFStats(InternalCFStatsType type, uint64_t value) {
    cf_stats_value_[type] += value;
    ++cf_stats_count_[type];
I
Igor Canadi 已提交
321 322
  }

323 324
  void AddDBStats(InternalDBStatsType type, uint64_t value,
                  bool concurrent = false) {
325
    auto& v = db_stats_[type];
326 327 328 329 330 331
    if (concurrent) {
      v.fetch_add(value, std::memory_order_relaxed);
    } else {
      v.store(v.load(std::memory_order_relaxed) + value,
              std::memory_order_relaxed);
    }
332 333 334 335
  }

  uint64_t GetDBStats(InternalDBStatsType type) {
    return db_stats_[type].load(std::memory_order_relaxed);
I
Igor Canadi 已提交
336 337
  }

338 339 340 341
  HistogramImpl* GetFileReadHist(int level) {
    return &file_read_latency_[level];
  }

342 343 344 345
  uint64_t GetBackgroundErrorCount() const { return bg_error_count_; }

  uint64_t BumpAndGetBackgroundErrorCount() { return ++bg_error_count_; }

346 347 348
  bool GetStringProperty(const DBPropertyInfo& property_info,
                         const Slice& property, std::string* value);

349 350
  bool GetMapProperty(const DBPropertyInfo& property_info,
                      const Slice& property,
351
                      std::map<std::string, std::string>* value);
352

353 354
  bool GetIntProperty(const DBPropertyInfo& property_info, uint64_t* value,
                      DBImpl* db);
I
Igor Canadi 已提交
355

356 357
  bool GetIntPropertyOutOfMutex(const DBPropertyInfo& property_info,
                                Version* version, uint64_t* value);
358

359 360 361 362
  const std::vector<CompactionStats>& TEST_GetCompactionStats() const {
    return comp_stats_;
  }

363 364 365
  // Store a mapping from the user-facing DB::Properties string to our
  // DBPropertyInfo struct used internally for retrieving properties.
  static const std::unordered_map<std::string, DBPropertyInfo> ppt_name_to_info;
366

I
Igor Canadi 已提交
367
 private:
368
  void DumpDBStats(std::string* value);
369
  void DumpCFMapStats(std::map<std::string, std::string>* cf_stats);
370
  void DumpCFMapStats(
371 372
      std::map<int, std::map<LevelStatType, double>>* level_stats,
      CompactionStats* compaction_stats_sum);
373
  void DumpCFMapStatsIOStalls(std::map<std::string, std::string>* cf_stats);
374
  void DumpCFStats(std::string* value);
375 376
  void DumpCFStatsNoFileHistogram(std::string* value);
  void DumpCFFileHistogram(std::string* value);
377 378

  // Per-DB stats
379
  std::atomic<uint64_t> db_stats_[INTERNAL_DB_STATS_ENUM_MAX];
380
  // Per-ColumnFamily stats
381 382
  uint64_t cf_stats_value_[INTERNAL_CF_STATS_ENUM_MAX];
  uint64_t cf_stats_count_[INTERNAL_CF_STATS_ENUM_MAX];
383 384
  // Per-ColumnFamily/level compaction stats
  std::vector<CompactionStats> comp_stats_;
385
  std::vector<HistogramImpl> file_read_latency_;
I
Igor Canadi 已提交
386 387

  // Used to compute per-interval statistics
388 389 390
  struct CFStatsSnapshot {
    // ColumnFamily-level stats
    CompactionStats comp_stats;
391
    uint64_t ingest_bytes_flush;      // Bytes written to L0 (Flush)
392
    uint64_t stall_count;             // Stall count
393 394 395 396 397
    // Stats from compaction jobs - bytes written, bytes read, duration.
    uint64_t compact_bytes_write;
    uint64_t compact_bytes_read;
    uint64_t compact_micros;
    double seconds_up;
398

399 400 401 402 403 404
    // AddFile specific stats
    uint64_t ingest_bytes_addfile;     // Total Bytes ingested
    uint64_t ingest_files_addfile;     // Total number of files ingested
    uint64_t ingest_l0_files_addfile;  // Total number of files ingested to L0
    uint64_t ingest_keys_addfile;      // Total number of keys ingested

405
    CFStatsSnapshot()
406
        : ingest_bytes_flush(0),
407 408 409 410
          stall_count(0),
          compact_bytes_write(0),
          compact_bytes_read(0),
          compact_micros(0),
411 412 413 414 415
          seconds_up(0),
          ingest_bytes_addfile(0),
          ingest_files_addfile(0),
          ingest_l0_files_addfile(0),
          ingest_keys_addfile(0) {}
S
Siying Dong 已提交
416 417 418 419 420 421 422 423 424 425 426 427 428 429

    void Clear() {
      comp_stats.Clear();
      ingest_bytes_flush = 0;
      stall_count = 0;
      compact_bytes_write = 0;
      compact_bytes_read = 0;
      compact_micros = 0;
      seconds_up = 0;
      ingest_bytes_addfile = 0;
      ingest_files_addfile = 0;
      ingest_l0_files_addfile = 0;
      ingest_keys_addfile = 0;
    }
430 431 432 433 434 435 436 437
  } cf_stats_snapshot_;

  struct DBStatsSnapshot {
    // DB-level stats
    uint64_t ingest_bytes;            // Bytes written by user
    uint64_t wal_bytes;               // Bytes written to WAL
    uint64_t wal_synced;              // Number of times WAL is synced
    uint64_t write_with_wal;          // Number of writes that request WAL
I
Igor Canadi 已提交
438 439
    // These count the number of writes processed by the calling thread or
    // another thread.
440 441
    uint64_t write_other;
    uint64_t write_self;
S
sdong 已提交
442 443 444 445 446
    // Total number of keys written. write_self and write_other measure number
    // of write requests written, Each of the write request can contain updates
    // to multiple keys. num_keys_written is total number of keys updated by all
    // those writes.
    uint64_t num_keys_written;
S
sdong 已提交
447 448
    // Total time writes delayed by stalls.
    uint64_t write_stall_micros;
449 450 451 452 453 454 455 456 457
    double seconds_up;

    DBStatsSnapshot()
        : ingest_bytes(0),
          wal_bytes(0),
          wal_synced(0),
          write_with_wal(0),
          write_other(0),
          write_self(0),
458
          num_keys_written(0),
S
sdong 已提交
459
          write_stall_micros(0),
460
          seconds_up(0) {}
S
Siying Dong 已提交
461 462 463 464 465 466 467 468 469 470 471 472

    void Clear() {
      ingest_bytes = 0;
      wal_bytes = 0;
      wal_synced = 0;
      write_with_wal = 0;
      write_other = 0;
      write_self = 0;
      num_keys_written = 0;
      write_stall_micros = 0;
      seconds_up = 0;
    }
473
  } db_stats_snapshot_;
I
Igor Canadi 已提交
474

475 476 477
  // Handler functions for getting property values. They use "value" as a value-
  // result argument, and return true upon successfully setting "value".
  bool HandleNumFilesAtLevel(std::string* value, Slice suffix);
478
  bool HandleCompressionRatioAtLevelPrefix(std::string* value, Slice suffix);
479 480
  bool HandleLevelStats(std::string* value, Slice suffix);
  bool HandleStats(std::string* value, Slice suffix);
481
  bool HandleCFMapStats(std::map<std::string, std::string>* compaction_stats);
482
  bool HandleCFStats(std::string* value, Slice suffix);
483 484
  bool HandleCFStatsNoFileHistogram(std::string* value, Slice suffix);
  bool HandleCFFileHistogram(std::string* value, Slice suffix);
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515
  bool HandleDBStats(std::string* value, Slice suffix);
  bool HandleSsTables(std::string* value, Slice suffix);
  bool HandleAggregatedTableProperties(std::string* value, Slice suffix);
  bool HandleAggregatedTablePropertiesAtLevel(std::string* value, Slice suffix);
  bool HandleNumImmutableMemTable(uint64_t* value, DBImpl* db,
                                  Version* version);
  bool HandleNumImmutableMemTableFlushed(uint64_t* value, DBImpl* db,
                                         Version* version);
  bool HandleMemTableFlushPending(uint64_t* value, DBImpl* db,
                                  Version* version);
  bool HandleNumRunningFlushes(uint64_t* value, DBImpl* db, Version* version);
  bool HandleCompactionPending(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumRunningCompactions(uint64_t* value, DBImpl* db,
                                   Version* version);
  bool HandleBackgroundErrors(uint64_t* value, DBImpl* db, Version* version);
  bool HandleCurSizeActiveMemTable(uint64_t* value, DBImpl* db,
                                   Version* version);
  bool HandleCurSizeAllMemTables(uint64_t* value, DBImpl* db, Version* version);
  bool HandleSizeAllMemTables(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumEntriesActiveMemTable(uint64_t* value, DBImpl* db,
                                      Version* version);
  bool HandleNumEntriesImmMemTables(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleNumDeletesActiveMemTable(uint64_t* value, DBImpl* db,
                                      Version* version);
  bool HandleNumDeletesImmMemTables(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleEstimateNumKeys(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumSnapshots(uint64_t* value, DBImpl* db, Version* version);
  bool HandleOldestSnapshotTime(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumLiveVersions(uint64_t* value, DBImpl* db, Version* version);
516 517
  bool HandleCurrentSuperVersionNumber(uint64_t* value, DBImpl* db,
                                       Version* version);
518 519 520 521
  bool HandleIsFileDeletionsEnabled(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleBaseLevel(uint64_t* value, DBImpl* db, Version* version);
  bool HandleTotalSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
522
  bool HandleLiveSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
523 524 525 526 527 528
  bool HandleEstimatePendingCompactionBytes(uint64_t* value, DBImpl* db,
                                            Version* version);
  bool HandleEstimateTableReadersMem(uint64_t* value, DBImpl* db,
                                     Version* version);
  bool HandleEstimateLiveDataSize(uint64_t* value, DBImpl* db,
                                  Version* version);
529
  bool HandleMinLogNumberToKeep(uint64_t* value, DBImpl* db, Version* version);
530 531 532
  bool HandleActualDelayedWriteRate(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleIsWriteStopped(uint64_t* value, DBImpl* db, Version* version);
Y
Yi Wu 已提交
533 534
  bool HandleEstimateOldestKeyTime(uint64_t* value, DBImpl* db,
                                   Version* version);
535

536 537 538 539 540 541 542
  // Total number of background errors encountered. Every time a flush task
  // or compaction task fails, this counter is incremented. The failure can
  // be caused by any possible reason, including file system errors, out of
  // resources, or input file corruption. Failing when retrying the same flush
  // or compaction will cause the counter to increase too.
  uint64_t bg_error_count_;

543
  const int number_levels_;
I
Igor Canadi 已提交
544
  Env* env_;
545
  ColumnFamilyData* cfd_;
S
Siying Dong 已提交
546
  uint64_t started_at_;
I
Igor Canadi 已提交
547 548
};

549 550 551 552 553
#else

class InternalStats {
 public:
  enum InternalCFStatsType {
554 555 556 557 558 559 560 561
    L0_FILE_COUNT_LIMIT_SLOWDOWNS,
    LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS,
    MEMTABLE_LIMIT_STOPS,
    MEMTABLE_LIMIT_SLOWDOWNS,
    L0_FILE_COUNT_LIMIT_STOPS,
    LOCKED_L0_FILE_COUNT_LIMIT_STOPS,
    PENDING_COMPACTION_BYTES_LIMIT_SLOWDOWNS,
    PENDING_COMPACTION_BYTES_LIMIT_STOPS,
562 563
    WRITE_STALLS_ENUM_MAX,
    BYTES_FLUSHED,
564
    BYTES_INGESTED_ADD_FILE,
565 566 567
    INGESTED_NUM_FILES_TOTAL,
    INGESTED_LEVEL0_NUM_FILES_TOTAL,
    INGESTED_NUM_KEYS_TOTAL,
568 569 570 571 572 573 574 575 576 577 578
    INTERNAL_CF_STATS_ENUM_MAX,
  };

  enum InternalDBStatsType {
    WAL_FILE_BYTES,
    WAL_FILE_SYNCED,
    BYTES_WRITTEN,
    NUMBER_KEYS_WRITTEN,
    WRITE_DONE_BY_OTHER,
    WRITE_DONE_BY_SELF,
    WRITE_WITH_WAL,
S
sdong 已提交
579
    WRITE_STALL_MICROS,
580 581 582
    INTERNAL_DB_STATS_ENUM_MAX,
  };

583
  InternalStats(int /*num_levels*/, Env* /*env*/, ColumnFamilyData* /*cfd*/) {}
584 585 586

  struct CompactionStats {
    uint64_t micros;
587 588
    uint64_t bytes_read_non_output_levels;
    uint64_t bytes_read_output_level;
589
    uint64_t bytes_written;
590
    uint64_t bytes_moved;
591 592 593
    int num_input_files_in_non_output_levels;
    int num_input_files_in_output_level;
    int num_output_files;
594 595 596 597
    uint64_t num_input_records;
    uint64_t num_dropped_records;
    int count;

598 599
    explicit CompactionStats() {}

600
    explicit CompactionStats(CompactionReason /*reason*/, int /*c*/) {}
601

602
    explicit CompactionStats(const CompactionStats& /*c*/) {}
603

604
    void Add(const CompactionStats& /*c*/) {}
605

606
    void Subtract(const CompactionStats& /*c*/) {}
607 608
  };

609
  void AddCompactionStats(int /*level*/, const CompactionStats& /*stats*/) {}
610

611
  void IncBytesMoved(int /*level*/, uint64_t /*amount*/) {}
612

613
  void AddCFStats(InternalCFStatsType /*type*/, uint64_t /*value*/) {}
614

615 616
  void AddDBStats(InternalDBStatsType /*type*/, uint64_t /*value*/,
                  bool /*concurrent */ = false) {}
617

618
  HistogramImpl* GetFileReadHist(int /*level*/) { return nullptr; }
619

620 621 622 623
  uint64_t GetBackgroundErrorCount() const { return 0; }

  uint64_t BumpAndGetBackgroundErrorCount() { return 0; }

624 625
  bool GetStringProperty(const DBPropertyInfo& /*property_info*/,
                         const Slice& /*property*/, std::string* /*value*/) {
626 627
    return false;
  }
628

629 630 631
  bool GetMapProperty(const DBPropertyInfo& /*property_info*/,
                      const Slice& /*property*/,
                      std::map<std::string, std::string>* /*value*/) {
632 633 634
    return false;
  }

635 636
  bool GetIntProperty(const DBPropertyInfo& /*property_info*/, uint64_t* /*value*/,
                      DBImpl* /*db*/) const {
637 638
    return false;
  }
639

640 641
  bool GetIntPropertyOutOfMutex(const DBPropertyInfo& /*property_info*/,
                                Version* /*version*/, uint64_t* /*value*/) const {
642 643
    return false;
  }
644 645 646
};
#endif  // !ROCKSDB_LITE

I
Igor Canadi 已提交
647
}  // namespace rocksdb