#include <string>
#include <vector>
+#include "rocksdb/customizable.h"
#include "rocksdb/status.h"
namespace ROCKSDB_NAMESPACE {
/**
- * Keep adding ticker's here.
- * 1. Any ticker should be added before TICKER_ENUM_MAX.
+ * Keep adding tickers here.
+ * 1. Any ticker should be added immediately before TICKER_ENUM_MAX, taking
+ * over its old value.
* 2. Add a readable string in TickersNameMap below for the newly added ticker.
* 3. Add a corresponding enum value to TickerType.java in the java API
* 4. Add the enum conversions from Java and C++ to portal.h's toJavaTickerType
- * and toCppTickers
+ * and toCppTickers
*/
enum Tickers : uint32_t {
// total block cache misses
COMPACTION_RANGE_DEL_DROP_OBSOLETE, // all keys in range were deleted.
// Deletions obsoleted before bottom level due to file gap optimization.
COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE,
- // If a compaction was cancelled in sfm to prevent ENOSPC
+ // If a compaction was canceled in sfm to prevent ENOSPC
COMPACTION_CANCELLED,
// Number of keys written to the database via the Put and Write call's
// over large number of keys with same userkey.
NUMBER_OF_RESEEKS_IN_ITERATION,
- // Record the number of calls to GetUpadtesSince. Useful to keep track of
+ // Record the number of calls to GetUpdatesSince. Useful to keep track of
// transaction log iterator refreshes
GET_UPDATES_SINCE_CALLS,
BLOCK_CACHE_COMPRESSED_MISS, // miss in the compressed block cache
NUMBER_ITER_SKIP,
// BlobDB specific stats
- // # of Put/PutTTL/PutUntil to BlobDB.
+ // # of Put/PutTTL/PutUntil to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_PUT,
- // # of Write to BlobDB.
+ // # of Write to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_WRITE,
- // # of Get to BlobDB.
+ // # of Get to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_GET,
- // # of MultiGet to BlobDB.
+ // # of MultiGet to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_MULTIGET,
- // # of Seek/SeekToFirst/SeekToLast/SeekForPrev to BlobDB iterator.
+ // # of Seek/SeekToFirst/SeekToLast/SeekForPrev to BlobDB iterator. Only
+ // applicable to legacy BlobDB.
BLOB_DB_NUM_SEEK,
- // # of Next to BlobDB iterator.
+ // # of Next to BlobDB iterator. Only applicable to legacy BlobDB.
BLOB_DB_NUM_NEXT,
- // # of Prev to BlobDB iterator.
+ // # of Prev to BlobDB iterator. Only applicable to legacy BlobDB.
BLOB_DB_NUM_PREV,
- // # of keys written to BlobDB.
+ // # of keys written to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_KEYS_WRITTEN,
- // # of keys read from BlobDB.
+ // # of keys read from BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_NUM_KEYS_READ,
- // # of bytes (key + value) written to BlobDB.
+ // # of bytes (key + value) written to BlobDB. Only applicable to legacy
+ // BlobDB.
BLOB_DB_BYTES_WRITTEN,
- // # of bytes (keys + value) read from BlobDB.
+ // # of bytes (keys + value) read from BlobDB. Only applicable to legacy
+ // BlobDB.
BLOB_DB_BYTES_READ,
- // # of keys written by BlobDB as non-TTL inlined value.
+ // # of keys written by BlobDB as non-TTL inlined value. Only applicable to
+ // legacy BlobDB.
BLOB_DB_WRITE_INLINED,
- // # of keys written by BlobDB as TTL inlined value.
+ // # of keys written by BlobDB as TTL inlined value. Only applicable to legacy
+ // BlobDB.
BLOB_DB_WRITE_INLINED_TTL,
- // # of keys written by BlobDB as non-TTL blob value.
+ // # of keys written by BlobDB as non-TTL blob value. Only applicable to
+ // legacy BlobDB.
BLOB_DB_WRITE_BLOB,
- // # of keys written by BlobDB as TTL blob value.
+ // # of keys written by BlobDB as TTL blob value. Only applicable to legacy
+ // BlobDB.
BLOB_DB_WRITE_BLOB_TTL,
// # of bytes written to blob file.
BLOB_DB_BLOB_FILE_BYTES_WRITTEN,
// # of times a blob files being synced.
BLOB_DB_BLOB_FILE_SYNCED,
// # of blob index evicted from base DB by BlobDB compaction filter because
- // of expiration.
+ // of expiration. Only applicable to legacy BlobDB.
BLOB_DB_BLOB_INDEX_EXPIRED_COUNT,
// size of blob index evicted from base DB by BlobDB compaction filter
- // because of expiration.
+ // because of expiration. Only applicable to legacy BlobDB.
BLOB_DB_BLOB_INDEX_EXPIRED_SIZE,
// # of blob index evicted from base DB by BlobDB compaction filter because
- // of corresponding file deleted.
+ // of corresponding file deleted. Only applicable to legacy BlobDB.
BLOB_DB_BLOB_INDEX_EVICTED_COUNT,
// size of blob index evicted from base DB by BlobDB compaction filter
- // because of corresponding file deleted.
+ // because of corresponding file deleted. Only applicable to legacy BlobDB.
BLOB_DB_BLOB_INDEX_EVICTED_SIZE,
- // # of blob files that were obsoleted by garbage collection.
+ // # of blob files that were obsoleted by garbage collection. Only applicable
+ // to legacy BlobDB.
BLOB_DB_GC_NUM_FILES,
- // # of blob files generated by garbage collection.
+ // # of blob files generated by garbage collection. Only applicable to legacy
+ // BlobDB.
BLOB_DB_GC_NUM_NEW_FILES,
- // # of BlobDB garbage collection failures.
+ // # of BlobDB garbage collection failures. Only applicable to legacy BlobDB.
BLOB_DB_GC_FAILURES,
// # of keys dropped by BlobDB garbage collection because they had been
// overwritten. DEPRECATED.
BLOB_DB_GC_BYTES_EXPIRED,
// # of bytes relocated to new blob file by garbage collection.
BLOB_DB_GC_BYTES_RELOCATED,
- // # of blob files evicted because of BlobDB is full.
+ // # of blob files evicted because of BlobDB is full. Only applicable to
+ // legacy BlobDB.
BLOB_DB_FIFO_NUM_FILES_EVICTED,
- // # of keys in the blob files evicted because of BlobDB is full.
+ // # of keys in the blob files evicted because of BlobDB is full. Only
+ // applicable to legacy BlobDB.
BLOB_DB_FIFO_NUM_KEYS_EVICTED,
- // # of bytes in the blob files evicted because of BlobDB is full.
+ // # of bytes in the blob files evicted because of BlobDB is full. Only
+ // applicable to legacy BlobDB.
BLOB_DB_FIFO_BYTES_EVICTED,
// These counters indicate a performance issue in WritePrepared transactions.
// # of files deleted immediately by sst file manger through delete scheduler.
FILES_DELETED_IMMEDIATELY,
+ // The counters for error handler, not that, bg_io_error is the subset of
+ // bg_error and bg_retryable_io_error is the subset of bg_io_error
+ ERROR_HANDLER_BG_ERROR_COUNT,
+ ERROR_HANDLER_BG_IO_ERROR_COUNT,
+ ERROR_HANDLER_BG_RETRYABLE_IO_ERROR_COUNT,
+ ERROR_HANDLER_AUTORESUME_COUNT,
+ ERROR_HANDLER_AUTORESUME_RETRY_TOTAL_COUNT,
+ ERROR_HANDLER_AUTORESUME_SUCCESS_COUNT,
+
+ // Statistics for memtable garbage collection:
+ // Raw bytes of data (payload) present on memtable at flush time.
+ MEMTABLE_PAYLOAD_BYTES_AT_FLUSH,
+ // Outdated bytes of data present on memtable at flush time.
+ MEMTABLE_GARBAGE_BYTES_AT_FLUSH,
+
+ // Secondary cache statistics
+ SECONDARY_CACHE_HITS,
+
+ // Bytes read by `VerifyChecksum()` and `VerifyFileChecksums()` APIs.
+ VERIFY_CHECKSUM_READ_BYTES,
+
+ // Bytes read/written while creating backups
+ BACKUP_READ_BYTES,
+ BACKUP_WRITE_BYTES,
+
+ // Remote compaction read/write statistics
+ REMOTE_COMPACT_READ_BYTES,
+ REMOTE_COMPACT_WRITE_BYTES,
+
+ // Tiered storage related statistics
+ HOT_FILE_READ_BYTES,
+ WARM_FILE_READ_BYTES,
+ COLD_FILE_READ_BYTES,
+ HOT_FILE_READ_COUNT,
+ WARM_FILE_READ_COUNT,
+ COLD_FILE_READ_COUNT,
+
+ // Last level and non-last level read statistics
+ LAST_LEVEL_READ_BYTES,
+ LAST_LEVEL_READ_COUNT,
+ NON_LAST_LEVEL_READ_BYTES,
+ NON_LAST_LEVEL_READ_COUNT,
+
+ BLOCK_CHECKSUM_COMPUTE_COUNT,
+ MULTIGET_COROUTINE_COUNT,
+
+ // Integrated BlobDB specific stats
+ // # of times cache miss when accessing blob from blob cache.
+ BLOB_DB_CACHE_MISS,
+ // # of times cache hit when accessing blob from blob cache.
+ BLOB_DB_CACHE_HIT,
+ // # of data blocks added to blob cache.
+ BLOB_DB_CACHE_ADD,
+ // # of failures when adding blobs to blob cache.
+ BLOB_DB_CACHE_ADD_FAILURES,
+ // # of bytes read from blob cache.
+ BLOB_DB_CACHE_BYTES_READ,
+ // # of bytes written into blob cache.
+ BLOB_DB_CACHE_BYTES_WRITE,
+
+ // Time spent in the ReadAsync file system call
+ READ_ASYNC_MICROS,
+ // Number of errors returned to the async read callback
+ ASYNC_READ_ERROR_COUNT,
+
TICKER_ENUM_MAX
};
READ_NUM_MERGE_OPERANDS,
// BlobDB specific stats
- // Size of keys written to BlobDB.
+ // Size of keys written to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_KEY_SIZE,
- // Size of values written to BlobDB.
+ // Size of values written to BlobDB. Only applicable to legacy BlobDB.
BLOB_DB_VALUE_SIZE,
- // BlobDB Put/PutWithTTL/PutUntil/Write latency.
+ // BlobDB Put/PutWithTTL/PutUntil/Write latency. Only applicable to legacy
+ // BlobDB.
BLOB_DB_WRITE_MICROS,
- // BlobDB Get lagency.
+ // BlobDB Get latency. Only applicable to legacy BlobDB.
BLOB_DB_GET_MICROS,
- // BlobDB MultiGet latency.
+ // BlobDB MultiGet latency. Only applicable to legacy BlobDB.
BLOB_DB_MULTIGET_MICROS,
- // BlobDB Seek/SeekToFirst/SeekToLast/SeekForPrev latency.
+ // BlobDB Seek/SeekToFirst/SeekToLast/SeekForPrev latency. Only applicable to
+ // legacy BlobDB.
BLOB_DB_SEEK_MICROS,
- // BlobDB Next latency.
+ // BlobDB Next latency. Only applicable to legacy BlobDB.
BLOB_DB_NEXT_MICROS,
- // BlobDB Prev latency.
+ // BlobDB Prev latency. Only applicable to legacy BlobDB.
BLOB_DB_PREV_MICROS,
// Blob file write latency.
BLOB_DB_BLOB_FILE_WRITE_MICROS,
// Num of index and filter blocks read from file system per level.
NUM_INDEX_AND_FILTER_BLOCKS_READ_PER_LEVEL,
// Num of data blocks read from file system per level.
+ // Obsolete
NUM_DATA_BLOCKS_READ_PER_LEVEL,
// Num of sst files read from file system per level.
NUM_SST_READ_PER_LEVEL,
+ // Error handler statistics
+ ERROR_HANDLER_AUTORESUME_RETRY_COUNT,
+
+ // Stats related to asynchronous read requests.
+ ASYNC_READ_BYTES,
+ POLL_WAIT_MICROS,
+
+ // Number of prefetched bytes discarded by RocksDB.
+ PREFETCHED_BYTES_DISCARDED,
+
+ // Number of IOs issued in parallel in a MultiGet batch
+ MULTIGET_IO_BATCH_SIZE,
+
+ // Number of levels requiring IO for MultiGet
+ NUM_LEVEL_READ_PER_MULTIGET,
+
+ // Wait time for aborting async read in FilePrefetchBuffer destructor
+ ASYNC_PREFETCH_ABORT_MICROS,
+
HISTOGRAM_ENUM_MAX,
};
// options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED);
// HistogramData hist;
// options.statistics->histogramData(FLUSH_TIME, &hist);
-class Statistics {
+//
+// Exceptions MUST NOT propagate out of overridden functions into RocksDB,
+// because RocksDB is not exception-safe. This could cause undefined behavior
+// including data loss, unreported corruption, deadlocks, and more.
+class Statistics : public Customizable {
public:
- virtual ~Statistics() {}
+ ~Statistics() override {}
static const char* Type() { return "Statistics"; }
+ static Status CreateFromString(const ConfigOptions& opts,
+ const std::string& value,
+ std::shared_ptr<Statistics>* result);
+ // Default name of empty, for backwards compatibility. Derived classes should
+ // override this method.
+ // This default implementation will likely be removed in a future release
+ const char* Name() const override { return ""; }
virtual uint64_t getTickerCount(uint32_t tickerType) const = 0;
virtual void histogramData(uint32_t type,
HistogramData* const data) const = 0;
// Resets all ticker and histogram stats
virtual Status Reset() { return Status::NotSupported("Not implemented"); }
- // String representation of the statistic object.
+#ifndef ROCKSDB_LITE
+ using Customizable::ToString;
+#endif // ROCKSDB_LITE
+ // String representation of the statistic object. Must be thread-safe.
virtual std::string ToString() const {
// Do nothing by default
return std::string("ToString(): not implemented");