feat(stats): add database statistics
This commit is contained in:
1 parent
7102875bf5
commit
bb1625d405
1 file changed
+48
@@ -0,0 +1,48 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub const maxTrackedLevels = 8;
|
||||
|
||||
pub const LevelStat = struct {
|
||||
tables: usize = 0,
|
||||
entries: u64 = 0,
|
||||
physicalBytes: u64 = 0,
|
||||
};
|
||||
|
||||
pub const Stats = struct {
|
||||
memtableEntries: usize = 0,
|
||||
memtableBytes: usize = 0,
|
||||
sstableCount: usize = 0,
|
||||
liveEntries: u64 = 0,
|
||||
physicalBytes: u64 = 0,
|
||||
cacheHits: u64 = 0,
|
||||
cacheMisses: u64 = 0,
|
||||
nextSeq: u64 = 0,
|
||||
levels: [maxTrackedLevels]LevelStat = [_]LevelStat{.{}} ** maxTrackedLevels,
|
||||
|
||||
pub fn cacheHitRate(self: Stats) f64 {
|
||||
const total = self.cacheHits + self.cacheMisses;
|
||||
if (total == 0) return 0;
|
||||
return @as(f64, @floatFromInt(self.cacheHits)) / @as(f64, @floatFromInt(total));
|
||||
}
|
||||
|
||||
pub fn deepestLevel(self: Stats) usize {
|
||||
var deepest: usize = 0;
|
||||
for (self.levels, 0..) |level, i| {
|
||||
if (level.tables > 0) deepest = i;
|
||||
}
|
||||
return deepest;
|
||||
}
|
||||
|
||||
pub fn print(self: Stats, writer: anytype) !void {
|
||||
try writer.print("memtable entries={d} bytes={d}\n", .{ self.memtableEntries, self.memtableBytes });
|
||||
try writer.print("sstables count={d} entries={d} physicalBytes={d}\n", .{ self.sstableCount, self.liveEntries, self.physicalBytes });
|
||||
try writer.print("nextSeq {d}\n", .{self.nextSeq});
|
||||
try writer.print("blockCache hits={d} misses={d} hitRate={d:.3}\n", .{ self.cacheHits, self.cacheMisses, self.cacheHitRate() });
|
||||
var i: usize = 0;
|
||||
const deepest = self.deepestLevel();
|
||||
while (i <= deepest) : (i += 1) {
|
||||
const level = self.levels[i];
|
||||
try writer.print(" L{d} tables={d} entries={d} physicalBytes={d}\n", .{ i, level.tables, level.entries, level.physicalBytes });
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user