RocksDB 中的 DB 类中定义了一个结构体 Properties,里面是许多 RocksDB 的属性。
具体代码在 db.h
中,在这里查看。
结构体 Properties 中的每个成员都对应一个 rocksdb 属性,我们可以通过 GetProperty()
或 GetMapProperty()
等方法来获取其中的内容。具体方法说明详见 获取属性值的方法。
本文的所有属性示例均使用 GetProperty()
,其他的方法的输出内容可能会略有不同,但大体一样。
例如:
1 |
|
上面的代码演示了获取 rocksdb 属性值的方法之一。
关于示例代码中 "rocksdb.num-files-at-level2"
的介绍详见 1. kNumFilesAtLevelPrefix
我这里上面代码执行后的输出如下:
1 | 3 |
这表示我当前的 rocksdb 数据库 "./testdb"
中 level2 中一共有 3 个 sst 文件。
-
下面我会按照这些属性在源码中的定义顺序来逐个介绍它们,较为复杂的会举例说明。
部分带有类似 level<N>
字样的属性中的 <N>
表示 level 数,例如 level2。
1. kNumFilesAtLevelPrefix
定义
1 | static const std::string kNumFilesAtLevelPrefix; |
属性
1 | rocksdb.num-files-at-level<N> |
含义
表示 L<N>
中的全部 sst 文件数。
如 rocksdb.num-files-at-level2
表示 level 2 中全部的 sst 文件数。
2. kCompressionRatioAtLevelPrefix
定义
1 | static const std::string kCompressionRatioAtLevelPrefix; |
属性
1 | rocksdb.compression-ratio-at-level<N> |
含义
表示 L<N>
的数据压缩率。
数据压缩率 = 未压缩的数据大小 / 压缩后的文件大小
若 L<N>
没有打开的文件,则此属性值为 "-1.0"
.
3. kStats
定义
1 | static const std::string kStats; |
属性
1 | rocksdb.stats |
含义
这是一个多行 string,包含了数据库里的一些数据统计信息。
这个属性其实就是 6. kCFStatsNoFileHistogram 和 7. kCFFileHistogram 和 8. kDBStats 的组合。
所以这个属性我们在下面 6. 和 7. 和 8. 小节来说,内容是一模一样的。
4. kSSTables
定义
1 | static const std::string kSSTables; |
属性
1 | rocksdb.sstables |
含义
SST 文件的简略信息。是一个多行 stirng。
具体信息形如:
1 | --- level 0 --- version# 1 --- |
可以看到,每个 level 都有描述,即便没有 sst 文件的 levle 4,5,6 中也同样有对应的标题。
-
我们这里取其中一条来分析:
1 | 328:30430428[84038683 .. 85066084]['6B65792D746573743638373435353539' seq:84038683, type:1 .. '6B65792D746573743639373732393630' seq:85066084, type:1](0) |
这是上面 level 1 的第 1 条信息。
- 328
信息一开始的 328
表示 sst 文件的编号,你可以在数据库目录里找到对应的 sst 文件,就像下图这样。
这里这个 sst 文件名至少是 6 位的,所以我们编号 328
的 sst
文件实际文件名是 000328.sst
,当我们有更多 sst 文件时,这个文件名编号是可以超过 6 位的。
- 30430428
这个表示 sst 文件的大小,单位字节。这里代表 000328.sst
这个文件的大小是 30430428 字节。
- [84038683 .. 85066084]
84038683
是这个 sst 文件的最小序列号(sequence number),85066084
是这个 sst 文件的最大序列号。
- ['6B65792D746573743638373435353539' seq:84038683, type:1 .. '6B65792D746573743639373732393630' seq:85066084, type:1]
'6B65792D746573743638373435353539' seq:84038683, type:1
是最小的内部键(interval key)解析后的信息,'6B65792D746573743639373732393630' seq:85066084, type:1
是最大的内部键解析后的信息。
这里以最小的内部键解析后的信息举例:
- - '6B65792D746573743638373435353539'
是 key 的 16 进制编码,可以通过这个编码解析出原始的 key 的。这个编码的长度将是原始 key (Slice 类型)长度的两倍,原因是原来是一个字符 1 个字节(8 位),用 16 进制编码,是将原来的数据每 4 位编成一个 16 进制值,所以返回的长度将是原来数据长度的两倍。
- - seq:84038683
是这个 key 的序列号,与上述的 sst 文件的最小序列号是一样的。
- - type:1
是这个 key 的 value 的类型,1
表示这是一个正常的值。具体关于此值的定义详见 dbformat.h
,很清楚,这里就不多赘述了。
5. kCFStats
定义
1 | static const std::string kCFStats; |
属性
1 | rocksdb.cfstats |
含义
这是一个多行 string,包含了数据库中关于 column family 的一些数据统计信息。
这个属性其实就是 6. kCFStatsNoFileHistogram 和 7. kCFFileHistogram 的组合。
所以这个属性我们在下面 6. 和 7. 小节来说,内容是一模一样的。
6. kCFStatsNoFileHistogram
定义
1 | static const std::string kCFStatsNoFileHistogram; |
属性
1 | rocksdb.cfstats-no-file-histogram |
含义
我们先看一下这个属性值的示例,再逐一来说其每个值的含义。
1 | ** Compaction Stats [default] ** |
我们可以看到上面上班部分有两个“表格”,标题都是 ** Compaction Stats [default] **
(我们知道 rocksdb 中的 key 是按列族管理的,这里的 default
指的就是默认列族),然后是一行关于 Blob 文件的信息,最后是多行统计信息。下面我们逐一说明。
-
我们先看第一个表格:
Level
: 用于级别压缩 LSM 的级别。L<N>
: 表示 LSM 的级别,如 L0,L3 等。对于 universal compaction,所有文件都在 L0 中。Sum
: 表示L<N>
各属性的和。Int
: 与Sum
类似,也是各层的和,但只包含来自上一个报告间隔的数据。需要注意这里是单词 “Interval” 的缩写,表示“间隔”,而不是整数类型。
Files
: 这有两个值a/b
,a 是此 level 中的 sst 文件数,b 是此 level 当前正在进行压缩的 sst 文件数。Size
: 此 level 全部的 sst 文件总大小。Score
: 当前 level 的 compaction 最高分数。
当有多个 level 触发 compaction 条件时,就要依靠分数选择执行 compaction 的 level,分数越高越优先。
分数 0 或 1 都是正确的值,分数大于 1 的 level 是需要被压缩的。
L0 的分数计算方法是 L0 的文件数除以level0_file_num_compaction_trigger
,或 L0 的总大小减去max_bytes_for_level_base
,二者取较大的。这里要注意,如果第 L0 的文件数小于level0_file_num_compaction_trigger
,那无论分数多高都不会执行 compaction。
L1 及以上的分数计算方法是Level files size
/MaxBytesForLevel
。Read(GB)
: 在L<N>
到L<N+1>
之间的 compaction 中总共读取的数据大小,包括从L<N>
和从L<N+1>
读的。即Read(GB)
=Rn(GB)
+Rnp1(GB)
。Rn(GB)
: 在L<N>
到L<N+1>
之间的 compaction 中,仅包含从L<N>
读取的数据大小。Rnp1(GB)
: 在L<N>
到L<N+1>
之间的 compaction 中,仅包含从L<N+1>
读取的数据大小。Write(GB)
: 在L<N>
到L<N+1>
之间的 compaction 中总共写入的数据大小。Wnew(GB)
: 写入L<N+1>
的新字节数。计算方法是在L<N>
的 compaction 中写入L<N+1>
的字节数减去从L<N+1>
读取的字节数。Moved(GB)
: 在L<N>
到L<N+1>
之间的 compaction 中,从L<N>
移动到L<N+1>
的字节数。注意这里除了会更新 manifest 来表示某个文件原来在L<N>
而现在在L<N+1>
以外不涉及其他 I/O 操作。W-Amp
: (写入L<N+1>
的总字节数) / (从L<N>
读的总字节数)。这是L<N>
和L<N+1>
之间的 compaction 的写放大。Rd(MB/s)
:L<N>
到L<N+1>
之间的 compaction 的读取速率,其值等于Read(GB) * 1024
/duration
,duration
就是Comp(sec)
,不过做了一点处理,就是把 Comp(sec) 的微秒形式 + 1,以防止其作为分母时为 0。(在代码中进行这个时间计算时,单位用的是微秒,Comp(sec) 也只是把微秒换算成秒。上面说的是在原始的微秒值上 + 1,这对结果几乎没有影响。)Wr(MB/s)
:L<N>
到L<N+1>
之间的 compaction 的写入速率,其值等于Write(GB) * 1024
/duration
,duration
含义同上。Comp(sec)
:L<N>
到L<N+1>
之间的总的 compaction 耗时。CompMergeCPU(sec)
:L<N>
到L<N+1>
之间的 compaction 占用 CPU 的时间。Comp(cnt)
:L<N>
到L<N+1>
之间进行的 compaction 数量。Avg(sec)
:L<N>
到L<N+1>
之间,平均每个 compaction 的耗时。KeyIn
:L<N>
到L<N+1>
之间 compaction 过程中比较的 key 数量。KeyDrop
: 在 compaction 过程中丢弃(未写入)的 key 数量。Rblob(GB)
:L<N>
到L<N+1>
之间的 compaction 从 blob 文件中读取的数据大小。Wblob(GB)
:L<N>
到L<N+1>
之间的 compaction 写入 blob 文件的数据大小。
-
然后我们看第二个表格:
第二个表格只有第一列和上一个表格不同,所有我们这里只说这一列。
这一列的表头是 Priority
,也就是优先级,下面有 2 个属性值,Low
和 High
。
事实上,受限于我们的实例,这个地方总共可以有 4 个属性值,分别为:Bottom
、Low
、High
、和 User
。
这个表格展示的就是各个优先级的操作的统计数据,应该不难理解。
-
关于 Blob 这一行,只有两个内容,一是 Blob 文件的数量,二是 Blob 文件的总大小。
这里指的是当前数据库中存在的 Blob 文件的数量和总大小。
-
最后就是这个多行的统计信息了。
下面大部分统计都有两个条目,cumulative
(除了 Uptime(secs)
用的 total
,含义一样) 和 interval
。
cumulative
表示从数据库开始运行到现在的统计值。interval
表示本次报告距离上次报告的间隔。
这里以 Uptime(secs)
和 Flush(GB)
举例说明,后面其他的就简单说了。
Uptime(secs)
:total
: 数据库已运行时间(从启动到现在)。interval
: 本次报告距离上次报告的间隔时间。
这里表示当前显示的数据库运行时间,比上次显示的数据库运行时间,多了多少秒。
例如上次报告的total
值是 100.3,当前total
值是 102.5,那么interval
就是 2.2。
Flush(GB)
:cumulative
: 从数据库开始运行到现在,累计完成 flush 的数据大小。注意这里指的是从内存 flush 到 L0 的数据。interval
: 本次报告距离上次报告的间隔大小。
这里表示当前显示的已 flush 数据大小,比上次显示的已 flush 数据大小,多了多少。
计算方法同上。
下面就简单说了:
AddFile(GB)
: 增加的文件大小。AddFile(Total Files)
: 增加的文件数量。AddFile(L0 Files)
: L0 增加的文件数量。AddFile(Keys)
: 增加的 key 的数量。compaction
(cumulative
和interval
在两行):write
: compaction 中写入的数据。有两个值,前者是写入总量,后者是写入速率。read
: compaction 中读取的数据。有两个值,前者是读取总量,后者是读取速率。seconds
: compaction 进行的时间。
最后还有个 Stalls(count)
:
Stalls(count)
:level0_slowdown
: 由于 L0 的文件数达到了level0_slowdown_writes_trigger
导致的写入放缓的次数。level0_slowdown_with_compaction
: 触发level0_slowdown
时(计数 + 1 时),若当前有涉及 level 0 的 compaction 正在进行,则此计数 + 1。level0_numfiles
: 由于 L0 的文件数达到了level0_stop_writes_trigger
导致的写入停止次数。level0_numfiles_with_compaction
: 触发level0_numfiles
时(计数 + 1 时),若当前有涉及 level 0 的 compaction 正在进行,则此计数 + 1。stop for pending_compaction_bytes
: 由于待进行 compaction 的字节数达到了hard_pending_compaction_bytes_limit
导致的写入停止次数。slowdown for pending_compaction_bytes
: 由于待进行 compaction 的字节数达到了soft_pending_compaction_bytes_limit
导致的写入放缓次数。memtable_compaction
: 因为所有的 memtable 都满了,flush 过程无法跟上导致的写入停止次数。memtable_slowdown
: 因为所有的 memtable 都快满了,flush 过程无法跟上导致的写入放缓次数。interval n total count
:n
是距离上次报告增加的 Stall 总次数。其值就是前面 8 项里除了level0_slowdown_with_compaction
和level0_numfiles_with_compaction
的另外 6 项的“间隔”的和。
对于 interval n total count
,其值又等于 io_stalls.total_stop
+ io_stalls.total_slowdown
。io_stalls.total_stop
是上面 3 种导致写入停止的情况次数的和,io_stalls.total_slowdown
是上面与 3 种导致写入放缓的情况次数的和。
这两个属性我们用 GetMapProperty()
获取时才会输出,而 GetProperty()
不会输出。
7. kCFFileHistogram
定义
1 | static const std::string kCFFileHistogram; |
属性
1 | rocksdb.cf-file-histogram |
含义
下面是一个真实世界的 rocksdb 实例的此属性输出,我们先看一下此属性的值,再分析其含义。
1 | ** File Read Latency Histogram By Level [default] ** |
这个示例比较长,用来解释说明有点冗余,我们就简单看看就好。
一开始的标题也写明了,这个属性给出的是一个 “按 level 划分的文件读取延迟柱状图”,延迟单位为微秒。default
同样表示默认列族。
这里选一段来,方便解释,如下:1
2
3
4
5
6
7
8
9
10
11** Level 3 read latency histogram (micros):
Count: 7024 Average: 0.0209 StdDev: 0.51
Min: 0 Median: 0.5005 Max: 32
Percentiles: P50: 0.50 P75: 0.75 P99: 0.99 P99.9: 1.00 P99.99: 29.79
------------------------------------------------------
[ 0, 1 ] 7017 99.900% 99.900% ####################
( 1, 2 ] 2 0.028% 99.929%
( 2, 3 ] 1 0.014% 99.943%
( 3, 4 ] 1 0.014% 99.957%
( 6, 10 ] 1 0.014% 99.972%
( 22, 34 ] 2 0.028% 100.000%
这是 Level 3 的数据。
Count
: 表示当前 Level 总共读的次数(上例为 Level 3 总共读了 7024 次)。Average
: 所有的读的平均延迟(上例为 Level 3 的 7024 次读的平均延迟为 0.0209 微秒)。Min
, Median
, Max
: 分别表示所有读延迟的最小值、中位数和最大值。Percentiles
: P50, P75, P99, P99.99, P99.99 的延迟。
下面最左边是柱状图的区间,和数学中的括号类似,(
)
表示开区间,[
]
表示闭区间。
第二列是数量,即当前延迟区间的读数量,总和等于上面的 Count
。
第三列是当前延迟区间的读数量占总读数量的比例。
最后一列是从 0 到当前延迟区间的读书量的总占比。
8. kDBStats
定义
1 | static const std::string kDBStats; |
属性
1 | rocksdb.dbstats |
含义
下面是一个现实示例的该输出输出,我们在下面解释。
1 | ** DB Stats ** |
total
和 Cumulative
都表示从数据库启动开始到现在的累计结果。interval
表示距离上次报告的间隔。
这样,这个属性输出就只有 4 个值:
Uptime(secs)
: 数据库从启动到现在的时间。writes
:writes
: 写入次数。keys
: 写入的 key 数量。commit groups
: 提交写入的组数量。writes per commit group
: 平均每个组包含的 write 数量。ingest
: 有两个值,分别表示写入数据库的总数据大小,与平均写入速率。syncs
: sync 次数。writes per sync
: 每次 sync 的 write 次数。written
: 这里有两个值,分别为写入的字节数、写入速率。
WAL
:writes
: 写入次数。syncs
: sync 次数。writes per sync
: 每次 sync 的 write 次数。written
: 这里有两个值,分别为已写入的总字节数、平均写入速率。
stall
: 有两个值。第一个是推迟时间,格式是时:分:秒
。第二个percent
是推迟时间占数据库运行时间的百分比。
9. kLevelStats
定义
1 | static const std::string kLevelStats; |
属性
1 | rocksdb.levelstats |
含义
顾名思义,LSM 各个 Level 的统计数据。
下面给出一个真实世界的实例的此属性:
1 | Level Files Size(MB) |
很简单,就是每个 Level 的 sst 文件数,以及总大小。
这里注意下是压缩(compaction)后的大小,别的就不多解释了。
10. kBlockCacheEntryStats
定义
1 | static const std::string kBlockCacheEntryStats; |
属性
1 | rocksdb.block-cache-entry-stats |
含义
block cache 的使用统计数据。
因为我写这篇博客的时候还没有用到这个属性,所以这里后面再回来补。
11. kNumImmutableMemTable
定义
1 | static const std::string kNumImmutableMemTable; |
属性
1 | rocksdb.num-immutable-mem-table |
含义
尚未 flush 的不可变 memtable 数量。
12. kNumImmutableMemTableFlushed
定义
1 | static const std::string kNumImmutableMemTableFlushed; |
属性
1 | rocksdb.num-immutable-mem-table-flushed |
含义
已经 flush 完成的不可变 memtable 数量。
13. kMemTableFlushPending
定义
1 | static const std::string kMemTableFlushPending; |
属性
1 | rocksdb.mem-table-flush-pending |
含义
值为 0 或 1。
1 表示当前存在待 flush 的 memtable,0 反之。
14. kNumRunningFlushes
定义
1 | static const std::string kNumRunningFlushes; |
属性
1 | rocksdb.num-running-flushes |
含义
当前正在进行的 flush 数量。
15. kCompactionPending
定义
1 | static const std::string kCompactionPending; |
属性
1 | rocksdb.compaction-pending |
含义
值为 0 或 1。
1 表示当前存在至少一个正在等待的 compaction,0 反之。
16. kNumRunningCompactions
定义
1 | static const std::string kNumRunningCompactions; |
属性
1 | rocksdb.num-running-compactions |
含义
当前正在进行的 compaction 数量。
17. kBackgroundErrors
定义
1 | static const std::string kBackgroundErrors; |
属性
1 | rocksdb.background-errors |
含义
后台累计发生的错误总数。
18. kCurSizeActiveMemTable
定义
1 | static const std::string kCurSizeActiveMemTable; |
属性
1 | rocksdb.cur-size-active-mem-table |
含义
当前活跃的 memtable 的大概大小(字节)。
19. kCurSizeAllMemTables
定义
1 | static const std::string kCurSizeAllMemTables; |
属性
1 | rocksdb.cur-size-all-mem-tables |
含义
全部 memtabke 总的大概大小(字节)。
包含当前活跃的 memtable,以及未 flush 的不可变 memtable。
20. kSizeAllMemTables
定义
1 | static const std::string kSizeAllMemTables; |
属性
1 | rocksdb.size-all-mem-tables |
含义
全部 memtabke 总的大概大小(字节)。
包含当前活跃的 memtable、未 flush 的不可变 memtable,以及 pinned 的不可变 memtable。
21. kNumEntriesActiveMemTable
定义
1 | static const std::string kNumEntriesActiveMemTable; |
属性
1 | rocksdb.num-entries-active-mem-table |
含义
当前活跃的 memtable 中的条目总数。
22. kNumEntriesImmMemTables
定义
1 | static const std::string kNumEntriesImmMemTables; |
属性
1 | rocksdb.num-entries-imm-mem-tables |
含义
未 flush 的不可变 memtable 中的条目数量。
23. kNumDeletesActiveMemTable
定义
1 | static const std::string kNumDeletesActiveMemTable; |
属性
1 | rocksdb.num-deletes-active-mem-table |
含义
当前活跃的 memtable 中删除的条目总数。
24. kNumDeletesImmMemTables
定义
1 | static const std::string kNumDeletesImmMemTables; |
属性
1 | rocksdb.num-deletes-imm-mem-tables |
含义
未 flush 的不可变 memtable 中删除的条目总数。
25. kEstimateNumKeys
定义
1 | static const std::string kEstimateNumKeys; |
属性
1 | rocksdb.estimate-num-keys |
含义
数据库中大概的 key 数量。
包含活跃的 memtable,未 flush 的不可变 memtable,以及存储空间(已 flush 的 sst 文件)中的。
是大致数量而不是精确数量,原因是有一些 key 的删除、覆盖操作难以及时统计。
26. kEstimateTableReadersMem
定义
1 | static const std::string kEstimateTableReadersMem; |
属性
1 | rocksdb.estimate-table-readers-mem |
含义
用于读取 sst 而使用的大概内存大小。
不包括 block cache 使用的内存(例如 filter 和 index blocks)。
27. kIsFileDeletionsEnabled
定义
1 | static const std::string kIsFileDeletionsEnabled; |
属性
1 | rocksdb.is-file-deletions-enabled |
含义
表示是否允许删除过期、废弃的文件。
0 表示允许,非 0 表示不允许。
这里的内部实现是有一个计数器 disable_delete_obsolete_files_
,用来累计禁用次数,默认为 1。
方法 DBImpl::DisableFileDeletions()
给此计数器加 1。
方法 DBImpl::EnableFileDeletions(bool force)
:
参数 force
若为 true 则直接将计数器归零。
参数 force
若为 false 则给计数器减 1,最多把计数器减到 0。
28. kNumSnapshots
定义
1 | static const std::string kNumSnapshots; |
属性
1 | rocksdb.num-snapshots |
含义
数据库中未释放的快照数量。
29. kOldestSnapshotTime
定义
1 | static const std::string kOldestSnapshotTime; |
属性
1 | rocksdb.oldest-snapshot-time |
含义
最旧的未释放的快照的 unix 时间戳。
30. kOldestSnapshotSequence
定义
1 | static const std::string kOldestSnapshotSequence; |
属性
1 | rocksdb.oldest-snapshot-sequence |
含义
最旧的未释放的快照的序列号。
31. kNumLiveVersions
定义
1 | static const std::string kNumLiveVersions; |
属性
1 | rocksdb.num-live-versions |
含义
实时版本(live version)数量。
Version
是一个内部数据结构,详见 version_set.h
。
更多实时版本通常意味着更多的 SST 文件不会被迭代器或未完成的 compactions 删除。
32. kCurrentSuperVersionNumber
定义
1 | static const std::string kCurrentSuperVersionNumber; |
属性
1 | rocksdb.current-super-version-number |
含义
返回当前 LSM 版本的编号。它是一个 uint64_t
整数,在 LSM 树发生任何更改后递增。
重新启动数据库后,不会保留该号码,将再次从 0 开始。
33. kEstimateLiveDataSize
定义
1 | static const std::string kEstimateLiveDataSize; |
属性
1 | rocksdb.estimate-live-data-size |
含义
以字节为单位返回实时数据量的估计值。
对于 BlobDB ,它还包括版本的 blob 文件中实时的字节确切值。
34. kMinLogNumberToKeep
定义
1 | static const std::string kMinLogNumberToKeep; |
属性
1 | rocksdb.min-log-number-to-keep |
含义
应当保留日志文件的最小数量。
35. kMinObsoleteSstNumberToKeep
定义
1 | static const std::string kMinObsoleteSstNumberToKeep; |
属性
1 | rocksdb.min-obsolete-sst-number-to-keep |
含义
返回要保留的过时 SST 的最小文件号。
如果可以删除所有过时的文件,将返回 uint64_t
的最大值(即 18446744073709551615)。
36. kTotalSstFilesSize
定义
1 | static const std::string kTotalSstFilesSize; |
属性
1 | rocksdb.total-sst-files-size |
含义
所有 sst 文件的总大小(字节)。
注意,如果 sst 文件太多,输出这个属性值可能会降低数据库的查询速度。
37. kLiveSstFilesSize
定义
1 | static const std::string kLiveSstFilesSize; |
属性
1 | rocksdb.live-sst-files-size |
含义
返回属于最新 LSM 树的所有 SST 文件的总大小(字节)。
这里的“最新”,我的理解是 LSM 的最新状态。
38. kLiveSstFilesSizeAtTemperature
定义
1 | static const std::string kLiveSstFilesSizeAtTemperature; |
属性
1 | rocksdb.live_sst_files_size_at_temperature |
含义
所有特定文件温度(temperature)下的 SST 文件的总大小(字节)
rocksdb 中定义了一个温度类 Temperature
,用以描述文件的温度:1
2
3
4
5
6enum class Temperature : uint8_t {
kUnknown = 0,
kHot = 0x04,
kWarm = 0x08,
kCold = 0x0C,
};
rocksdb 把文件的温度信息传递给文件系统,使得文件获得不同的放置或编码。
这几个温度的编号中间保留了一些数字,留给以后可能的扩展。
另外,虽然这个属性比较好解释,但我没在代码中发现任何的实际调用,该属性的输出始终为空。
39. kBaseLevel
定义
1 | static const std::string kBaseLevel; |
属性
1 | rocksdb.base-level |
含义
L0 数据将被 compact 到的 level 数。
这个值默认是 1。
如果当前不是 level-compaction,这个值是 -1,因为不适用。
这个值的含义是 L0 的数据会被直接 compact 到哪个层,一般来说就是 L1,也可以设的更高。
举个例子,如果该值为 3,那么 L0 的数据就会被直接 compact 到 L3,L1 和 L2 就是空的。
40. kEstimatePendingCompactionBytes
定义
1 | static const std::string kEstimatePendingCompactionBytes; |
属性
1 | rocksdb.estimate-pending-compaction-bytes |
含义
返回 compaction 需要重写的估计总字节数,以使所有 level 降低到目标大小以下。
对 level-based 以外的其他压缩无效。
41. kAggregatedTableProperties
定义
1 | static const std::string kAggregatedTableProperties; |
属性
1 | rocksdb.aggregated-table-properties |
含义
返回目标列族的聚合表属性的字符串或映射表示。
仅包含对聚合有意义的属性。
下面是一个使用 GetProperty()
输出的例子(字符串),基本都可以通过名字来理解。
其实用 GetMapProperty()
更合适,可以输出更好理解的键值对形式(我懒了)。
1 | # data blocks=770855; # entries=109566553; # deletions=0; # merge operands=0; # range deletions=0; raw key size=2557375015; raw average key size=23.340837; raw value size=1680842603; raw average value size=15.340837; data block size=3134714864; index block size (user-key? 62, delta-value? 62)=21101981; filter block size=0; # entries for filter=0; (estimated) table size=3155816845; filter policy name=N/A; prefix extractor name=N/A; column family ID=N/A; column family name=N/A; comparator name=N/A; merge operator name=N/A; property collectors names=N/A; SST file compression algo=N/A; SST file compression options=N/A; creation time=0; time stamp of earliest key=0; file creation time=0; slow compression estimated data size=0; fast compression estimated data size=0; DB identity=; DB session identity=; DB host id=; original file number=0; |
42. kAggregatedTablePropertiesAtLevel
定义
1 | static const std::string kAggregatedTablePropertiesAtLevel; |
属性
1 | rocksdb.aggregated-table-properties-at-level<N> |
含义
与上一个类似,不过是按 Level 输出的。
43. kActualDelayedWriteRate
定义
1 | static const std::string kActualDelayedWriteRate; |
属性
1 | rocksdb.actual-delayed-write-rate |
含义
当前实际的延迟写速率。
0 表示没有延迟。
44. kIsWriteStopped
定义
1 | static const std::string kIsWriteStopped; |
属性
1 | rocksdb.is-write-stopped |
含义
表示写入是否已经停止。
1 表示已停止,0 反之。
45. kEstimateOldestKeyTime
定义
1 | static const std::string kEstimateOldestKeyTime; |
属性
1 | rocksdb.estimate-oldest-key-time |
含义
数据库中最旧的 key 的时间戳估计值。
目前只对 compaction_options_fifo.allow_compaction
为 false
的 FIFO compaction 有效。
46. kBlockCacheCapacity
定义
1 | static const std::string kBlockCacheCapacity; |
属性
1 | rocksdb.block-cache-capacity |
含义
block cache 的容量。
47. kBlockCacheUsage
定义
1 | static const std::string kBlockCacheUsage; |
属性
1 | rocksdb.block-cache-usage |
含义
存在于 block cache 中的条目占用的内存大小。
48. kBlockCachePinnedUsage
定义
1 | static const std::string kBlockCachePinnedUsage; |
属性
1 | rocksdb.block-cache-pinned-usage |
含义
被 pinned 的条目占用的内存大小。
49. kOptionsStatistics
定义
1 | static const std::string kOptionsStatistics; |
属性
1 | rocksdb.options-statistics |
含义
一个多行 strings,即 options.statistics
的内容。
50. kNumBlobFiles
定义
1 | static const std::string kNumBlobFiles; |
属性
1 | rocksdb.num-blob-files |
含义
当前版本中 blob 文件的数量。
51. kBlobStats
定义
1 | static const std::string kBlobStats; |
属性
1 | rocksdb.blob-stats |
含义
当前版本中所有 blob 文件总的数量和总的大小,以及 blob 文件总的垃圾大小。
下面是一个示例值:1
2
3Number of blob files: 0
Total size of blob files: 0
Total size of garbage in blob files: 0
52. kTotalBlobFileSize
定义
1 | static const std::string kTotalBlobFileSize; |
属性
1 | rocksdb.total-blob-file-size |
含义
所有的版本中的 blob 文件的总大小。
53. kLiveBlobFileSize
定义
1 | static const std::string kLiveBlobFileSize; |
属性
1 | rocksdb.live-blob-file-size |
含义
当前版本的 blob 文件的总大小。