grafana / grafana/pyroscope

Query profiles parquet data from Queriers

Open
#2,757 0 comments 0 reactions 0 assignees View on GitHub
backend enhancement performance v1
Dominant language
Go
Stars
11.7k
Forks
802
Avg merge
1d 19h
Merged PRs (30d)
80

Description

As of now when we query from profiles we ask ingesters and store-gateways for profiling data. Most of data selection and aggregations/merge happens on those two components. This is where most of the CPU usage is on the read path.

Store-gateways are not really scalable since only 3 replicas of store-gateways has one given block per tenant, it also means some gateway will be more challenged than others which can cause unbalance usage ressources.

This is why I propose we stop selecting and merging data from store-gateways. We should only requests SeriesIndex+Labels per block to store-gateway then we should query directly parquet files from queriers and merge the data there. In fact I think store-gateways should only provide cache for tsdb and parquet file index.

This will reduce cost of operations since store-gateways have disk and will be less challenged but also improve scalability of the read path.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing profile reads across ingesters, store-gateways, and queriers, focusing on SeriesIndex, labels, and parquet data selection and merging. Done means profile queries no longer select and merge data in store-gateways, while queriers query and merge the parquet data with the required behavior preserved.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
backend, data, distributed-systems, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.