Skip to content

Commit 06af161

Browse files
committed
kvserver: add timeseries metric for value retrieval count
Epic: none Release note: None
1 parent 464489b commit 06af161

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

docs/generated/metrics/metrics.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17366,6 +17366,14 @@ layers:
1736617366
unit: BYTES
1736717367
aggregation: AVG
1736817368
derivative: NONE
17369+
- name: storage.value_separation.value_retrieval.count
17370+
exported_name: storage_value_separation_value_retrieval_count
17371+
description: The number of value retrievals of values separated into blob files.
17372+
y_axis_label: Events
17373+
type: COUNTER
17374+
unit: COUNT
17375+
aggregation: AVG
17376+
derivative: NON_NEGATIVE_DERIVATIVE
1736917377
- name: storage.wal.bytes_in
1737017378
exported_name: storage_wal_bytes_in
1737117379
description: The number of logical bytes the storage engine has written to the WAL

pkg/kv/kvserver/metrics.go

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2675,6 +2675,12 @@ Note that the measurement does not include the duration for replicating the eval
26752675
Measurement: "Bytes",
26762676
Unit: metric.Unit_BYTES,
26772677
}
2678+
metaValueSeparationValueRetrievalCount = metric.Metadata{
2679+
Name: "storage.value_separation.value_retrieval.count",
2680+
Help: "The number of value retrievals of values separated into blob files.",
2681+
Measurement: "Events",
2682+
Unit: metric.Unit_COUNT,
2683+
}
26782684
metaWALBytesWritten = metric.Metadata{
26792685
Name: "storage.wal.bytes_written",
26802686
Help: "The number of bytes the storage engine has written to the WAL",
@@ -3002,18 +3008,19 @@ type StoreMetrics struct {
30023008
CompressionUnknownBytes *metric.Gauge
30033009
CompressionOverallCR *metric.GaugeFloat64
30043010

3005-
categoryIterMetrics pebbleCategoryIterMetricsContainer
3006-
categoryDiskWriteMetrics pebbleCategoryDiskWriteMetricsContainer
3007-
ValueSeparationBytesReferenced *metric.Gauge
3008-
ValueSeparationBytesUnreferenced *metric.Gauge
3009-
ValueSeparationBlobFileCount *metric.Gauge
3010-
ValueSeparationBlobFileSize *metric.Gauge
3011-
WALBytesWritten *metric.Counter
3012-
WALBytesIn *metric.Counter
3013-
WALFailoverSwitchCount *metric.Counter
3014-
WALFailoverPrimaryDuration *metric.Counter
3015-
WALFailoverSecondaryDuration *metric.Counter
3016-
WALFailoverWriteAndSyncLatency *metric.ManualWindowHistogram
3011+
categoryIterMetrics pebbleCategoryIterMetricsContainer
3012+
categoryDiskWriteMetrics pebbleCategoryDiskWriteMetricsContainer
3013+
ValueSeparationBytesReferenced *metric.Gauge
3014+
ValueSeparationBytesUnreferenced *metric.Gauge
3015+
ValueSeparationBlobFileCount *metric.Gauge
3016+
ValueSeparationBlobFileSize *metric.Gauge
3017+
ValueSeparationValueRetrievalCount *metric.Counter
3018+
WALBytesWritten *metric.Counter
3019+
WALBytesIn *metric.Counter
3020+
WALFailoverSwitchCount *metric.Counter
3021+
WALFailoverPrimaryDuration *metric.Counter
3022+
WALFailoverSecondaryDuration *metric.Counter
3023+
WALFailoverWriteAndSyncLatency *metric.ManualWindowHistogram
30173024

30183025
RdbCheckpoints *metric.Gauge
30193026

@@ -3740,15 +3747,16 @@ func newStoreMetrics(histogramWindow time.Duration) *StoreMetrics {
37403747
categoryDiskWriteMetrics: pebbleCategoryDiskWriteMetricsContainer{
37413748
registry: storeRegistry,
37423749
},
3743-
ValueSeparationBytesReferenced: metric.NewGauge(metaValueSeparationBytesReferenced),
3744-
ValueSeparationBytesUnreferenced: metric.NewGauge(metaValueSeparationBytesUnreferenced),
3745-
ValueSeparationBlobFileCount: metric.NewGauge(metaValueSeparationBlobFileCount),
3746-
ValueSeparationBlobFileSize: metric.NewGauge(metaValueSeparationBlobFileSize),
3747-
WALBytesWritten: metric.NewCounter(metaWALBytesWritten),
3748-
WALBytesIn: metric.NewCounter(metaWALBytesIn),
3749-
WALFailoverSwitchCount: metric.NewCounter(metaStorageWALFailoverSwitchCount),
3750-
WALFailoverPrimaryDuration: metric.NewCounter(metaStorageWALFailoverPrimaryDuration),
3751-
WALFailoverSecondaryDuration: metric.NewCounter(metaStorageWALFailoverSecondaryDuration),
3750+
ValueSeparationBytesReferenced: metric.NewGauge(metaValueSeparationBytesReferenced),
3751+
ValueSeparationBytesUnreferenced: metric.NewGauge(metaValueSeparationBytesUnreferenced),
3752+
ValueSeparationBlobFileCount: metric.NewGauge(metaValueSeparationBlobFileCount),
3753+
ValueSeparationBlobFileSize: metric.NewGauge(metaValueSeparationBlobFileSize),
3754+
ValueSeparationValueRetrievalCount: metric.NewCounter(metaValueSeparationValueRetrievalCount),
3755+
WALBytesWritten: metric.NewCounter(metaWALBytesWritten),
3756+
WALBytesIn: metric.NewCounter(metaWALBytesIn),
3757+
WALFailoverSwitchCount: metric.NewCounter(metaStorageWALFailoverSwitchCount),
3758+
WALFailoverPrimaryDuration: metric.NewCounter(metaStorageWALFailoverPrimaryDuration),
3759+
WALFailoverSecondaryDuration: metric.NewCounter(metaStorageWALFailoverSecondaryDuration),
37523760
WALFailoverWriteAndSyncLatency: metric.NewManualWindowHistogram(
37533761
metaStorageWALFailoverWriteAndSyncLatency,
37543762
pebble.FsyncLatencyBuckets,
@@ -4187,6 +4195,7 @@ func (sm *StoreMetrics) updateEngineMetrics(m storage.Metrics) {
41874195
sm.ValueSeparationBytesUnreferenced.Update(int64(m.BlobFiles.ValueSize - m.BlobFiles.ReferencedValueSize))
41884196
sm.ValueSeparationBlobFileCount.Update(int64(m.BlobFiles.LiveCount))
41894197
sm.ValueSeparationBlobFileSize.Update(int64(m.BlobFiles.LiveSize))
4198+
sm.ValueSeparationValueRetrievalCount.Update(int64(m.Iterator.ValueRetrievalCount))
41904199
// NB: `UpdateIfHigher` is used here since there is a race in pebble where
41914200
// sometimes the WAL is rotated but metrics are retrieved prior to the update
41924201
// to BytesIn to account for the previous WAL.

pkg/storage/engine.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,9 @@ type AggregatedIteratorStats struct {
13031303
// ExternalSteps, it's a good indication that there's an accumulation of
13041304
// garbage within the LSM (NOT MVCC garbage).
13051305
InternalSteps int
1306+
// ValueRetrievalCount is the total count of value retrievals of values
1307+
// separated into blob files.
1308+
ValueRetrievalCount uint64
13061309
}
13071310

13081311
// AggregatedBatchCommitStats hold cumulative stats summed over all the

pkg/storage/pebble.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,6 +1420,7 @@ func (p *Pebble) aggregateIterStats(stats IteratorStats) {
14201420
p.iterStats.ExternalSteps += stats.Stats.ForwardStepCount[pebble.InterfaceCall] + stats.Stats.ReverseStepCount[pebble.InterfaceCall]
14211421
p.iterStats.InternalSeeks += stats.Stats.ForwardSeekCount[pebble.InternalIterCall] + stats.Stats.ReverseSeekCount[pebble.InternalIterCall]
14221422
p.iterStats.InternalSteps += stats.Stats.ForwardStepCount[pebble.InternalIterCall] + stats.Stats.ReverseStepCount[pebble.InternalIterCall]
1423+
p.iterStats.ValueRetrievalCount += stats.Stats.InternalStats.SeparatedPointValue.CountFetched
14231424
}
14241425

14251426
func (p *Pebble) aggregateBatchCommitStats(stats BatchCommitStats) {

0 commit comments

Comments
 (0)