Skip to content

Commit 78a4316

Browse files
committed
metrics: improve exampleMetrics
Reorganize the code to mirror the order of the fields in the struct, and fill in more of them (in particular the blob file metrics).
1 parent d35993e commit 78a4316

File tree

3 files changed

+111
-130
lines changed

3 files changed

+111
-130
lines changed

metrics.go

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -839,73 +839,9 @@ type pair[k, v any] struct {
839839
v v
840840
}
841841

842-
// String pretty-prints the metrics as below:
843-
// LSM | vtables | value sep | | ingested | amp
844-
// level size | tables size | count size | refsz valblk | in | tables size | r w
845-
// ---------------+-------------+-------------+---------------+--------+--------------+-----------
846-
// 0 216B | 101 102B | 101 103 | 114B 114B | 104B | 112 104B | 1 1.52
847-
// 1 416B | 201 202B | 201 203 | 214B 214B | 204B | 212 204B | 2 1.51
848-
// 2 616B | 301 302B | 301 303 | 314B 314B | 304B | 312 304B | 3 1.51
849-
// 3 816B | 401 402B | 401 403 | 414B 414B | 404B | 412 404B | 4 1.51
850-
// 4 1016B | 501 502B | 501 503 | 514B 514B | 504B | 512 504B | 5 1.50
851-
// 5 1.2KiB | 601 602B | 601 603 | 614B 614B | 604B | 612 604B | 6 1.50
852-
// 6 1.4KiB | 701 702B | 701 703 | 714B 714B | 704B | 712 704B | 7 1.50
853-
// total 5.6KiB | 2.8K 2.7KB | 2.8K 2.8K | 2.8KB 2.8KB | 2.8KB | 2.9K 2.8KB | 28 1.99
854-
// -----------------------------------------------------------------------------------------------
855-
// COMPACTIONS | moved | multilevel | read | written
856-
// level | score ff cff | tables size | top in read | tables blob | tables sstsz blobsz
857-
// -------+-----------------+-------------+-------------------+-------------+---------------------
858-
// 0 | 1.10 2.10 0.30 | 113 106B | 104B 104B 104B | 107B 117B | 221 217B 231B
859-
// 1 | 1.20 2.20 0.60 | 213 206B | 204B 204B 204B | 207B 217B | 421 417B 431B
860-
// 2 | 1.30 2.30 0.90 | 313 306B | 304B 304B 304B | 307B 317B | 621 617B 631B
861-
// 3 | 1.40 2.40 1.20 | 413 406B | 404B 404B 404B | 407B 417B | 821 817B 831B
862-
// 4 | 1.50 2.50 1.50 | 513 506B | 504B 504B 504B | 507B 517B | 1.0K 1017B 1.0KB
863-
// 5 | 1.60 2.60 1.80 | 613 606B | 604B 604B 604B | 607B 617B | 1.2K 1.2KB 1.2KB
864-
// 6 | 0.00 2.70 2.10 | 713 706B | 704B 704B 704B | 707B 717B | 1.4K 1.4KB 1.4KB
865-
// total | - - - | 2.9K 2.8KB | 2.8KB 2.8KB 2.8KB | 2.8KB 2.9KB | 5.7K 8.4KB 5.7KB
866-
// -----------------------------------------------------------------------------------------------
867-
// kind | default delete elision move read tomb rewrite copy multi blob
868-
// count | 27 28 29 30 31 16 32 33 34 0
869-
// -----------------------------------------------------------------------------------------------
870-
// COMMIT PIPELINE
871-
// wals | memtables | ingestions
872-
// files | written | overhead | flushes | live | zombie | total | flushable
873-
// ---------+-----------+-----------+-----------+------------+------------+---------+-------------
874-
// 22 (24B) | 25B: 26B | 4.0% | 8 | 12 (11B) | 14 (13B) | 27 | 36 (34B)
875-
// -----------------------------------------------------------------------------------------------
876-
// ITERATORS
877-
// block cache | file cache | filter | sst iters | snapshots
878-
// entries | hit rate | entries | hit rate | util | open | open
879-
// -----------+-------------+-------------+-------------+-------------+-------------+-------------
880-
// 2 (1B) | 42.9% | 18 (17B) | 48.7% | 47.4% | 21 | 4
881-
// -----------------------------------------------------------------------------------------------
882-
// FILES tables | blob files | blob values
883-
// stats prog | backing | zombie | loc zomb | live | zombie | total | refed | refed %
884-
// -------------+-----------+----------+----------+---------+---------+--------+--------+---------
885-
// 31 pending | 2.0MB (1) | 15B (16) | 30B | 0 (0B) | 0 (0B) | 0B | 0B | 0%
886-
// -----------------------------------------------------------------------------------------------
887-
// CGO MEMORY | block cache | memtables
888-
// tot | tot | data | maps | ents | tot
889-
// ------------+--------------+----------------+-----------------+-----------------+--------------
890-
// 15KB | 9.0KB | 4.0KB | 2.0KB | 3.0KB | 5.0KB
891-
// -----------------------------------------------------------------------------------------------
892-
// COMPACTIONS
893-
// estimated debt | in progress | cancelled | failed | problem spans
894-
// ------------------+-----------------+-----------------+-------------------+--------------------
895-
// 6B | 2 (7B) | 3 (3KB) | 5 | 2!!
896-
// -----------------------------------------------------------------------------------------------
897-
// KEYS
898-
// range keys | tombstones | missized tombstones | point dels | range dels
899-
// ---------------+-----------------+-------------------------+-----------------+-----------------
900-
// 123 | 456 | 789 | 1.0KB | 2.0KB
901-
// -----------------------------------------------------------------------------------------------
902-
// COMPRESSION
903-
// minlz: 32
904-
// snappy: 33
905-
// zstd: 34
906-
// none: 35
907-
// ???: 36
908-
842+
// String pretty-prints the metrics.
843+
//
844+
// See testdata/metrics for an example.
909845
func (m *Metrics) String() string {
910846
wb := ascii.Make(92, levelMetricsTable.CumulativeFieldWidth)
911847
var total LevelMetrics

metrics_test.go

Lines changed: 102 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -33,71 +33,50 @@ import (
3333
)
3434

3535
func exampleMetrics() Metrics {
36+
const MB = 1 << 20
37+
const GB = 1 << 30
38+
3639
var m Metrics
37-
m.BlockCache.Size = 1
38-
m.BlockCache.Count = 2
39-
m.BlockCache.Hits = 3
40-
m.BlockCache.Misses = 4
41-
m.Compact.Count = 5
42-
m.Compact.DefaultCount = 27
43-
m.Compact.DeleteOnlyCount = 28
44-
m.Compact.ElisionOnlyCount = 29
45-
m.Compact.MoveCount = 30
46-
m.Compact.ReadCount = 31
40+
m.BlockCache.Size = 1 * GB
41+
m.BlockCache.Count = 100
42+
m.BlockCache.Hits = 10000
43+
m.BlockCache.Misses = 5000
44+
45+
m.Compact.Count = 1000
46+
m.Compact.DefaultCount = 10
47+
m.Compact.DeleteOnlyCount = 11
48+
m.Compact.ElisionOnlyCount = 12
49+
m.Compact.CopyCount = 13
50+
m.Compact.MoveCount = 14
51+
m.Compact.ReadCount = 15
4752
m.Compact.TombstoneDensityCount = 16
48-
m.Compact.RewriteCount = 32
49-
m.Compact.CopyCount = 33
50-
m.Compact.MultiLevelCount = 34
51-
m.Compact.EstimatedDebt = 6
52-
m.Compact.InProgressBytes = 7
53+
m.Compact.RewriteCount = 17
54+
m.Compact.MultiLevelCount = 18
55+
m.Compact.BlobFileRewriteCount = 19
56+
m.Compact.CounterLevelCount = 20
57+
m.Compact.EstimatedDebt = 6 * GB
58+
m.Compact.InProgressBytes = 1 * MB
5359
m.Compact.NumInProgress = 2
54-
m.Compact.CounterLevelCount = 10
5560
m.Compact.CancelledCount = 3
5661
m.Compact.CancelledBytes = 3 * 1024
57-
m.Compact.FailedCount = 5
58-
m.Compact.NumProblemSpans = 2
62+
m.Compact.FailedCount = 4
63+
m.Compact.NumProblemSpans = 5
64+
m.Compact.MarkedFiles = 6
65+
m.Compact.Duration = 10 * time.Hour
66+
67+
m.Ingest.Count = 12
68+
5969
m.Flush.Count = 8
60-
m.Flush.AsIngestBytes = 34
61-
m.Flush.AsIngestTableCount = 35
62-
m.Flush.AsIngestCount = 36
70+
m.Flush.WriteThroughput.Bytes = 2 * MB
71+
m.Flush.WriteThroughput.WorkDuration = time.Hour
72+
m.Flush.WriteThroughput.IdleDuration = 10 * time.Hour
73+
m.Flush.NumInProgress = 2
74+
m.Flush.AsIngestCount = 4
75+
m.Flush.AsIngestTableCount = 5
76+
m.Flush.AsIngestBytes = 6
77+
6378
m.Filter.Hits = 9
6479
m.Filter.Misses = 10
65-
m.MemTable.Size = 11
66-
m.MemTable.Count = 12
67-
m.MemTable.ZombieSize = 13
68-
m.MemTable.ZombieCount = 14
69-
m.Keys.RangeKeySetsCount = 123
70-
m.Keys.TombstoneCount = 456
71-
m.Keys.MissizedTombstonesCount = 789
72-
m.Snapshots.Count = 4
73-
m.Snapshots.EarliestSeqNum = 1024
74-
m.Table.ZombieSize = 15
75-
m.Table.BackingTableCount = 1
76-
m.Table.BackingTableSize = 2 << 20
77-
m.Table.ZombieCount = 16
78-
m.FileCache.Size = 17
79-
m.FileCache.TableCount = 180
80-
m.FileCache.BlobFileCount = 181
81-
m.FileCache.Hits = 19
82-
m.FileCache.Misses = 20
83-
m.TableIters = 21
84-
m.WAL.Files = 22
85-
m.WAL.ObsoleteFiles = 23
86-
m.WAL.Size = 24
87-
m.WAL.BytesIn = 25
88-
m.WAL.BytesWritten = 26
89-
m.Ingest.Count = 27
90-
m.Table.Local.LiveSize = 28
91-
m.Table.Local.ObsoleteSize = 29
92-
m.Table.Local.ZombieSize = 30
93-
m.Table.PendingStatsCollectionCount = 31
94-
m.Table.InitialStatsCollectionComplete = true
95-
m.Table.Garbage.PointDeletionsBytesEstimate = 1024
96-
m.Table.Garbage.RangeDeletionsBytesEstimate = 2048
97-
m.Table.CompressedCountMinLZ = 32
98-
m.Table.CompressedCountSnappy = 33
99-
m.Table.CompressedCountZstd = 34
100-
m.Table.CompressedCountNone = 35
10180

10281
for i := range m.Levels {
10382
l := &m.Levels[i]
@@ -131,6 +110,72 @@ func exampleMetrics() Metrics {
131110
l.MultiLevel.TableBytesIn = base + 4
132111
l.MultiLevel.TableBytesRead = base + 4
133112
}
113+
114+
m.MemTable.Size = 2 * GB
115+
m.MemTable.Count = 12
116+
m.MemTable.ZombieSize = 13 * MB
117+
m.MemTable.ZombieCount = 5
118+
119+
m.Keys.RangeKeySetsCount = 123
120+
m.Keys.TombstoneCount = 456
121+
m.Keys.MissizedTombstonesCount = 789
122+
123+
m.Snapshots.Count = 4
124+
m.Snapshots.EarliestSeqNum = 1024
125+
m.Snapshots.PinnedKeys = 1234
126+
m.Snapshots.PinnedSize = 3 * GB
127+
128+
m.Table.ObsoleteSize = 15 * MB
129+
m.Table.ObsoleteCount = 16
130+
m.Table.ZombieSize = 17 * MB
131+
m.Table.ZombieCount = 18
132+
m.Table.BackingTableCount = 1
133+
m.Table.BackingTableSize = 2 * MB
134+
m.Table.CompressedCountMinLZ = 32
135+
m.Table.CompressedCountSnappy = 33
136+
m.Table.CompressedCountZstd = 34
137+
m.Table.CompressedCountNone = 35
138+
m.Table.Local.LiveSize = 28 * GB
139+
m.Table.Local.LiveCount = 10_000
140+
m.Table.Local.ObsoleteSize = 29 * MB
141+
m.Table.Local.ObsoleteCount = 13
142+
m.Table.Local.ZombieSize = 30 * MB
143+
m.Table.Local.ZombieCount = 14
144+
m.Table.Garbage.PointDeletionsBytesEstimate = 1 * MB
145+
m.Table.Garbage.RangeDeletionsBytesEstimate = 2 * MB
146+
m.Table.InitialStatsCollectionComplete = true
147+
m.Table.PendingStatsCollectionCount = 31
148+
149+
m.BlobFiles.LiveCount = 1234
150+
m.BlobFiles.LiveSize = 15 * GB
151+
m.BlobFiles.ValueSize = 14 * GB
152+
m.BlobFiles.ReferencedValueSize = 11 * GB
153+
m.BlobFiles.ObsoleteCount = 13
154+
m.BlobFiles.ObsoleteSize = 29 * MB
155+
m.BlobFiles.ZombieCount = 14
156+
m.BlobFiles.ZombieSize = 30 * MB
157+
m.BlobFiles.Local.LiveSize = 28 * GB
158+
m.BlobFiles.Local.LiveCount = 10_000
159+
m.BlobFiles.Local.ObsoleteSize = 29 * MB
160+
m.BlobFiles.Local.ObsoleteCount = 13
161+
m.BlobFiles.Local.ZombieSize = 30 * MB
162+
m.BlobFiles.Local.ZombieCount = 14
163+
164+
m.FileCache.Size = 1 * MB
165+
m.FileCache.TableCount = 180
166+
m.FileCache.BlobFileCount = 181
167+
m.FileCache.Hits = 19
168+
m.FileCache.Misses = 20
169+
170+
m.TableIters = 21
171+
m.Uptime = 72 * time.Hour
172+
173+
m.WAL.Files = 22
174+
m.WAL.ObsoleteFiles = 23
175+
m.WAL.Size = 24
176+
m.WAL.BytesIn = 25
177+
m.WAL.BytesWritten = 26
178+
134179
for i := range m.manualMemory {
135180
m.manualMemory[i].InUseBytes = uint64((i + 1) * 1024)
136181
}

testdata/metrics

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@ level | score ff cff | tables size | top in read | tables blob | ta
2323
total | 0 2.70 2.10 | 713 706 B | 704 B 704 B 704 B | 707 B 717 B | 1.4 K 1.4 Ki 1.4 KiB
2424
--------------------------------------------------------------------------------------------------
2525
kind | default delete elision move read tomb rewrite copy multi blob
26-
count | 27 28 29 30 31 16 32 33 34 0
26+
count | 10 11 12 14 15 16 17 13 18 19
2727
--------------------------------------------------------------------------------------------------
2828
COMMIT PIPELINE
2929
wals | memtables | ingestions
3030
files | written | overhead | flushes | live | zombie | total | flushable
3131
----------+------------+-----------+-----------+------------+------------+-----------+------------
32-
22 (24B) | 25B: 26B | 4.0% | 8 | 12 (11B) | 14 (13B) | 51 | 36 (34B)
32+
22 (24B) | 25B: 26B | 4.0% | 8 | 12 (2.0GB) | 5 (13MB) | 51 | 4 (6B)
3333
--------------------------------------------------------------------------------------------------
3434
ITERATORS
3535
block cache | file cache | filter | sst iters | snapshots
3636
entries | hit rate | entries | hit rate | util | open | open
3737
-------------+-------------+--------------+-------------+--------------+-------------+------------
38-
2 (1B) | 42.9% | 180 (17B) | 48.7% | 47.4% | 21 | 4
38+
100 (1.0GB) | 66.7% | 180 (1.0MB) | 48.7% | 47.4% | 21 | 4
3939
--------------------------------------------------------------------------------------------------
4040
FILES tables | blob files | blob values
4141
stats prog | backing | zombie | loc zomb | live | zombie | total | refed | refed %
4242
--------------+-----------+-----------+-----------+---------+----------+--------+--------+--------
43-
31 pending | 2.0MB (1) | 15B (16) | 30B | 0 (0B) | 0 (0B) | 0B | 0B | 0%
43+
31 pending | 2.0MB (1) | 17MB (18) | 30MB | 1.2K (1 | 14 (30MB | 14GB | 11GB | 79%
4444
--------------------------------------------------------------------------------------------------
4545
CGO MEMORY | block cache | memtables
4646
tot | tot | data | maps | ents | tot
@@ -50,12 +50,12 @@ CGO MEMORY | block cache | memtables
5050
COMPACTIONS
5151
estimated debt | in progress | cancelled | failed | problem spans
5252
------------------+-------------------+-------------------+-------------------+-------------------
53-
6B | 2 (7B) | 3 (3.0KB) | 5 | 2!!
53+
6.0GB | 2 (1.0MB) | 3 (3.0KB) | 4 | 5!!
5454
--------------------------------------------------------------------------------------------------
5555
KEYS
5656
range keys | tombstones | missized tombstones | point dels | range dels
5757
-----------------+------------------+--------------------------+-----------------+----------------
58-
123 | 456 | 789!! | 1.0KB | 2.0KB
58+
123 | 456 | 789!! | 1.0MB | 2.0MB
5959
--------------------------------------------------------------------------------------------------
6060
COMPRESSION
6161
minlz: 32

0 commit comments

Comments
 (0)