prometheus/tsdb
Bryan Boreham 040ef175eb
Optimise WAL loading by removing extra map and caching min-time (#9160)
* BenchmarkLoadWAL: close WAL after use

So that goroutines are stopped and resources released

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* BenchmarkLoadWAL: make series IDs co-prime with #workers

Series are distributed across workers by taking the modulus of the
ID with the number of workers, so multiples of 100 are a poor choice.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* BenchmarkLoadWAL: simulate mmapped chunks

Real Prometheus cuts chunks every 120 samples, then skips those samples
when re-reading the WAL. Simulate this by creating a single mapped chunk
for each series, since the max time is all the reader looks at.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Fix comment

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Remove series map from processWALSamples()

The locks that is commented to reduce contention in are now sharded
32,000 ways, so won't be contended. Removing the map saves memory and
goes just as fast.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* loadWAL: Cache the last mmapped chunk time

So we can skip calling append() for samples it will reject.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Improvements from code review

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Full stops and capitals on comments

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Cache max time in both places mmappedChunks is updated

Including refactor to extract function `setMMappedChunks`, to reduce
code duplication.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>

* Update head min/max time when mmapped chunks added

This ensures we have the correct values if no WAL samples are added for
that series.

Note that `mSeries.maxTime()` was always `math.MinInt64` before, since
that function doesn't consider mmapped chunks.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
2021-08-10 14:53:31 +05:30
..
chunkenc remove redundant parentheses (#9134) 2021-07-29 18:26:57 +05:30
chunks remove redundant parentheses (#9134) 2021-07-29 18:26:57 +05:30
docs/format Snapshot in-memory chunks on shutdown for faster restarts (#7229) 2021-08-06 17:51:01 +01:00
encoding Snapshot in-memory chunks on shutdown for faster restarts (#7229) 2021-08-06 17:51:01 +01:00
errors MultiError: Refactored MultiError for more concise and safe usage. (#8066) 2020-10-28 15:24:58 +00:00
fileutil More info in mmap error message (#8058) 2020-10-15 12:58:13 +05:30
goversion tsdb: test for leaks (#7566) 2020-07-21 10:08:06 +02:00
index LabelNames API with matchers (#9083) 2021-07-20 18:08:08 +05:30
record Add Exemplar Remote Write support (#8296) 2021-05-06 13:53:52 -07:00
test labels: Reduce allocated memory and latency of Hash method; Added tests. (#8025) 2020-10-15 11:31:28 +01:00
testdata tsdb: Delete blocks atomically; Remove tmp blocks on start; Added test. (#7772) 2020-08-11 06:56:08 +01:00
tombstones Switched to go-kit/log 2021-06-11 12:28:36 -04:00
tsdbutil storage: Split chunks if more than 120 samples (#8582) 2021-05-18 18:37:16 +02:00
wal Snapshot in-memory chunks on shutdown for faster restarts (#7229) 2021-08-06 17:51:01 +01:00
.gitignore Moving tsdb into its own subdirectory 2019-08-13 13:58:49 +05:30
block.go LabelNames API with matchers (#9083) 2021-07-20 18:08:08 +05:30
block_test.go LabelNames API with matchers (#9083) 2021-07-20 18:08:08 +05:30
blockwriter.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
blockwriter_test.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
CHANGELOG.md Rename default branch to main 2021-02-22 20:28:02 +01:00
compact.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
compact_test.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
db.go Snapshot in-memory chunks on shutdown for faster restarts (#7229) 2021-08-06 17:51:01 +01:00
db_test.go tsdb: Block Head GC till pending readers are done reading (#9081) 2021-07-20 14:17:20 +05:30
exemplar.go Exemplar resize (#8974) 2021-07-20 10:22:57 +05:30
exemplar_test.go Exemplar resize (#8974) 2021-07-20 10:22:57 +05:30
head.go Optimise WAL loading by removing extra map and caching min-time (#9160) 2021-08-10 14:53:31 +05:30
head_append.go Snapshot in-memory chunks on shutdown for faster restarts (#7229) 2021-08-06 17:51:01 +01:00
head_bench_test.go React UI: Add Starting Screen (#8662) 2021-06-05 15:29:32 +01:00
head_read.go Breakdown tsdb/head.go into multiple files (#9147) 2021-08-03 14:14:26 +02:00
head_test.go Optimise WAL loading by removing extra map and caching min-time (#9160) 2021-08-10 14:53:31 +05:30
head_wal.go Optimise WAL loading by removing extra map and caching min-time (#9160) 2021-08-10 14:53:31 +05:30
isolation.go Add present_over_time (#9097) 2021-07-29 12:38:11 +02:00
isolation_test.go tsdb: Block Head GC till pending readers are done reading (#9081) 2021-07-20 14:17:20 +05:30
mocks_test.go Move away from testutil, refactor imports (#8087) 2020-10-22 11:00:08 +02:00
querier.go LabelNames API with matchers (#9083) 2021-07-20 18:08:08 +05:30
querier_bench_test.go React UI: Add Starting Screen (#8662) 2021-06-05 15:29:32 +01:00
querier_test.go LabelNames API with matchers (#9083) 2021-07-20 18:08:08 +05:30
README.md Replace godoc.org links 2021-06-17 07:18:51 -04:00
repair.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
repair_test.go React UI: Add Starting Screen (#8662) 2021-06-05 15:29:32 +01:00
tsdbblockutil.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
wal.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00
wal_test.go Switched to go-kit/log 2021-06-11 12:28:36 -04:00

TSDB

GoPkg

This directory contains the Prometheus storage layer that is used in its 2.x releases.

A writeup of its design can be found here.

Based on the Gorilla TSDB white papers.

Video: Storing 16 Bytes at Scale from PromCon 2017.

See also the format documentation.

A series of blog posts explaining different components of TSDB: