From 2edbdfa0f2d5d99c12c07fc80af8ca0f81a2fdfe Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 21 Jun 2023 09:26:21 +0200 Subject: [PATCH] Design proposal: vParquet3 (#2525) * vParquet3 design proposal * Update 'last updated' * Apply suggestions from code review Co-authored-by: A. Stoewer * Address review comments * Update docs/design-proposals/2023-05 vParquet3.md Co-authored-by: Joe Elliott * Update docs/design-proposals/2023-05 vParquet3.md Co-authored-by: Joe Elliott --------- Co-authored-by: A. Stoewer Co-authored-by: Joe Elliott --- docs/design-proposals/2023-05 vParquet3.md | 178 ++++++++++++++++++ .../assets/vparquet3-compaction.jpg | Bin 0 -> 53194 bytes 2 files changed, 178 insertions(+) create mode 100644 docs/design-proposals/2023-05 vParquet3.md create mode 100644 docs/design-proposals/assets/vparquet3-compaction.jpg diff --git a/docs/design-proposals/2023-05 vParquet3.md b/docs/design-proposals/2023-05 vParquet3.md new file mode 100644 index 00000000000..f5d62e88a3f --- /dev/null +++ b/docs/design-proposals/2023-05 vParquet3.md @@ -0,0 +1,178 @@ +--- +Authors: Adrian Stoewer (@stoewer), Mario Rodriguez (@mapno) +Created: May 2023 +Last updated: 2023-05-31 +--- + +# vParquet3 + +## Summary + +This document describes how to extend Tempo’s Parquet based block format such that a configurable subset of span attributes can be stored in dedicated columns. +The goal is to improve the search performance of TraceQL in Tempo. + +### Table of Contents + +* [Context](#context) +* [Goals and requirements](#goals-and-requirements) +* [Implementation](#implementation) + * [Schema with spare columns](#schema-with-spare-columns) + * [Configuration and overrides](#configuration-and-overrides) + * [Compaction](#compaction) + * [Tooling](#tooling) + +## Context +The current Parquet schema stores span attributes in the repeated group `Attrs`. +The group contains a single column for all attribute keys and separate columns for the corresponding values (depending on the value type). +The size of the span attribute columns combined contribute to 30-70% of the overall block size. +To search for a specific attribute, it is necessary to access this large chunk of data. +The analysis of Tempo blocks from different use cases has further revealed that the 10 most frequently used span attributes are responsible for over 50% of the overall attribute size. + +A benchmark with a schema that stores the 5 most frequently occurring attributes in dedicated columns showed significant performance improvements: + +* The block size decreased by ~10% +* Compressed size of the generic attribute columns was reduced by ~40% +* The search speed for queries without matches improved by ~80% for attributes with dedicated columns and ~70% for generic attributes columns +* The search speed for queries returning matches improved by ~50% for attributes with dedicated columns and ~30% for generic attribute columns + +The amount and kind of span attributes varies a lot between use cases and the above benchmark was conducted with tracing data that captured a lot of span attributes. +Therefore, the search speed improvements that can be achieved by storing span attributes in dedicated columns, +can deviate from the above results. +However, the data still shows that dedicated columns for span attributes that can be tuned to a specific use case can improve Tempo’s search performance significantly. +This document describes how dedicated columns for span attributes will be implemented in Tempo. + +## Goals and requirements + +The main goal for the next iteration of the block format `vParquet3` is to be able to manually configure dedicated attribute columns for very heavy workloads. +To keep the scope small only the following features are implemented for now: + +* Only attributes with string values can be promoted to dedicated columns on resource and span level +* Attributes promoted to dedicated columns can be manually configured per tenant +* Support for changing dedicated column configurations + * Compactor treats different configs as different encodings + * Queriers read blocks with different configured columns +* Provide tooling and documentation that enables tenants to find good attributes to promote to dedicated columns + * Find attributes that contribute the most to block size + * (Stretch) Find the most common used attributes in search + +Future iterations may support additional features: + +* Workload analysis to determine suitable dedicated column configurations which can be used to make suggestions or to automate the configuration +* Fully dynamic schema that allows to add dedicated columns for different data types and encodings (e.g. delta or run length encoding) +* Apply config dynamically to old blocks during compaction + +## Implementation + +### Schema with spare columns + +There are two approaches for storing span attributes in dedicated columns in Tempo. +One possibility is to extend the Parquet schema dynamically and add the required extra columns at runtime. +This approach would allow to configure the number, type, and encoding of dedicated attribute columns and therefore allow Tempo to optimize the block layout specifically for every use case. +Ultimately this is what Tempo should be capable of in the future. +However, handling dynamically changing Parquet schemata correctly adds a lot of complexity. + +The alternative approach is to keep a set of spare columns in the schema and dynamically assign them to the respective span attributes. +The downside here is that the number, type, and encoding for dedicated span attributes is very restricted. +To keep the added complexity manageable, dedicated columns for span attributes are implemented using the spare columns approach for now. + +In the analyzed use cases, the 20 span attributes that contributed most to the overall attribute size, +were almost exclusively attributes with string values. +Given that the benchmark achieved good results with 5 dedicated columns, +it can be expected that extending the schema by 10 spare columns for string values is sufficient to achieve good performance improvements for most use cases. + +The following code outlines the schema changes: + +```go +type DedicatedAttrs struct { + String01 *string `parquet:",snappy,optional,dict"` + String02 *string `parquet:",snappy,optional,dict"` + ... + String10 *string `parquet:",snappy,optional,dict"` +} + +type Span struct { + ... + DedicatedAttrs DedicatedAttrs `parquet:""` +} +``` + +To execute TraceQL queries it is necessary to know which attribute is assigned to which spare column. +Since the assignment of spare columns to specific attributes changes over time, it is necessary to store this information for each block. + +Tempo stores metadata about each Block in the `meta.json` file. +The schema of this file will be extended such that it contains the assignment information: + +```go +{ + ... + "dedicatedColumns": [ + {"scope": "span", "name": "attrA", "type": "string"}, + {"scope": "span", "name": "attrB", "type": "string"}, + {"scope": "span", "name": "attrC", "type": "string"}, + ] +} +``` + +## Configuration and overrides + +Dedicated columns have been part of the Parquet-based formats since the first version. +As we gained operational knowledge, it became clear that the hardcoded set of attributes selected for dedicated columns didn’t work for all workloads. + +The biggest improvement of vParquet3 compared to older block formats is that the attributes that can be stored in dedicated columns are partially configurable. +And, it only makes sense that they’re configured per tenant. +Another important consideration is that dedicated columns need to be configured at runtime. +It is expected that selected attributes will change over time, as more data is ingested, new query patterns appear,new attributes are used, etc. +This would also allow for smoother operations, as a change in configuration doesn’t require a restart of Tempo. + +For these reasons, the configuration will be added to the storage / block section of Tempo’s yaml configuration file as well as to the override’s configuration: + +```go +type Limits struct { + ... + DedicatedColumns []sharedconfig.DedicatedColumn `yaml:"dedicated_columns"` +} +``` + +Dedicated columns will be configured as an array of definitions of columns, +where basic information about the selected attribute that is defined. +Required configurations are the scope of the attribute, its name and its type. + +```go +type DedicatedColumn struct { + Scope string `yaml:"scope"` // can be 'span' or 'resource' + Attribute string `yaml:"attribute"` + Type string `yaml:"type"` // for now only 'string' is supported +} +``` + +Additional config options can be added later to configure extra parameters such as encodings (e.g. dictionaries, lists, delta encoding), compression format (e.g. snappy). + +## Compaction + +When blocks are compacted the spare column assignment has to be taken into consideration: In cases where blocks have different column assignments, values need to be transferred from one column into another. +Although it is possible to implement compaction across different column assignments, this is not strictly necessary: +The assignment of span attributes to spare columns is not expected to change frequently therefore not compacting blocks with different assignments does not have a large impact on the compaction result. + +To handle compaction correctly the compaction block selector is adjusted such that blocks with different spare column assignments are not selected for compaction. + + + +## Tooling + +A key factor in the performance of dedicated columns is the attributes that are used for them. +We want to include tools that help operators find good candidates for dedicated columns. +What makes an attribute a good candidate will most likely vary from user to user, but there are some basic rules that can help us find them. + +From our analysis of Tempo blocks, we’ve found that attributes that occupy the most space in a block usually have the biggest impact on performance when promoted to dedicated columns. +Even when queries don’t search by those attributes. + +A lot of work to help analyze parquet blocks has already been done in [parquet-cli](https://github.com/stoewer/parquet-cli). +With this tool, we can inspect individual blocks and get aggregated data for the attributes present in a block, +and the size that each represents in the generic `attr` columns. +We can combine the capabilities of this tool with tempo-cli, which has better integration with Tempo backends. +This way, we could get aggregated data for all the blocks of a tenant present in a Tempo backend storage. + +(Stretch) Another method of finding good candidates for dedicated columns is by analyzing the read path. +An attribute that is queried by significantly more than the rest is a potential good candidate. +_Hot_ attributes can be found by extending metrics in the read path to record query patterns and extract frequently queried attributes. + diff --git a/docs/design-proposals/assets/vparquet3-compaction.jpg b/docs/design-proposals/assets/vparquet3-compaction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f26c7a2189ab11ecccdbbbb10cf1aa47edf52648 GIT binary patch literal 53194 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

c2LYL0HYClco4pZ})yW-}(emcU+IrZKB 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 Ye5lsOqwYrRb{`Fk(XbdUY2g1&041DbMgRZ+ literal 0 HcmV?d00001