Skip to content
This repository has been archived by the owner on Aug 13, 2019. It is now read-only.

Commit

Permalink
Add benchmark for queries from persisted data
Browse files Browse the repository at this point in the history
Signed-off-by: Chris Marchbanks <[email protected]>
  • Loading branch information
csmarchbanks committed Sep 26, 2018
1 parent a971f52 commit 3140f72
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 0 deletions.
3 changes: 3 additions & 0 deletions compact.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ func newCompactorMetrics(r prometheus.Registerer) *compactorMetrics {

// NewLeveledCompactor returns a LeveledCompactor.
func NewLeveledCompactor(r prometheus.Registerer, l log.Logger, ranges []int64, pool chunkenc.Pool) (*LeveledCompactor, error) {
if l == nil {
l = log.NewNopLogger()
}
if len(ranges) == 0 {
return nil, errors.Errorf("at least one range must be provided")
}
Expand Down
81 changes: 81 additions & 0 deletions querier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ package tsdb

import (
"fmt"
"io/ioutil"
"math"
"math/rand"
"path/filepath"
"sort"
"testing"

Expand Down Expand Up @@ -1306,6 +1308,85 @@ func BenchmarkMergedSeriesSet(b *testing.B) {
}
}

func BenchmarkPersistedQueries(b *testing.B) {
for _, nSeries := range []int{10, 100} {
for _, nSamples := range []int{1000, 10000, 100000} {
b.Run(fmt.Sprintf("series=%d,samplesPerSeries=%d", nSeries, nSamples), func(b *testing.B) {
block, err := createBlock(nSeries, nSamples)
testutil.Ok(b, err)
q, err := NewBlockQuerier(block, block.Meta().MinTime, block.Meta().MaxTime)
testutil.Ok(b, err)
defer q.Close()

b.ResetTimer()
b.ReportAllocs()

for i := 0; i < b.N; i++ {
ss, err := q.Select(labels.NewMustRegexpMatcher("__name__", ".+"))
for ss.Next() {
s := ss.At()
s.Labels()
s.Iterator()
}
testutil.Ok(b, ss.Err())
testutil.Ok(b, err)
}
})
}
}
}

func createBlock(nSeries, nSamples int) (*Block, error) {
head, err := NewHead(nil, nil, nil, 2*60*60*1000)
if err != nil {
return nil, err
}

lbls, err := labels.ReadLabels("testdata/20kseries.json", nSeries)
if err != nil {
return nil, err
}
refs := make([]uint64, nSeries)

for t := 0; t < nSamples; t++ {
app := head.Appender()
for i, lbl := range lbls {
if refs[i] != 0 {
err := app.AddFast(refs[i], int64(t), rand.Float64())
if err == nil {
continue
}
}
ref, err := app.Add(lbl, int64(t), rand.Float64())
if err != nil {
return nil, err
}
refs[i] = ref
}
err := app.Commit()
if err != nil {
return nil, err
}
}

compactor, err := NewLeveledCompactor(nil, nil, []int64{1000000}, nil)
if err != nil {
return nil, err
}

tmpdir, err := ioutil.TempDir("", "test")
if err != nil {
return nil, err
}

ulid, err := compactor.Write(tmpdir, head, head.MinTime(), head.MaxTime(), nil)
if err != nil {
return nil, err
}

return OpenBlock(filepath.Join(tmpdir, ulid.String()), nil)
}

type mockChunkReader map[uint64]chunkenc.Chunk

func (cr mockChunkReader) Chunk(id uint64) (chunkenc.Chunk, error) {
Expand Down

0 comments on commit 3140f72

Please sign in to comment.