Skip to content

[TraceQL] Reduce size of traceql Attribute struct and realign#5240

Merged
mdisibio merged 3 commits intografana:mainfrom
mdisibio:attribute-alignment
Jun 9, 2025
Merged

[TraceQL] Reduce size of traceql Attribute struct and realign#5240
mdisibio merged 3 commits intografana:mainfrom
mdisibio:attribute-alignment

Conversation

@mdisibio
Copy link
Copy Markdown
Contributor

@mdisibio mdisibio commented Jun 9, 2025

What this PR does:
This reduces the size of the Attribute struct from 40 bytes to 24. Helps memory but the main benefit is faster performance around attributes in general (mapping/lookup/equality/etc). Most impactful for comparison queries because they have the most attribute processing, but a few % improvements across the board.

Found this because during heavy reads, these operations are 5-10% of querier profiles.

Benchmark Search
                                                 │    b2.txt    │               a2.txt               │
                                                 │    sec/op    │   sec/op     vs base               │
BackendBlockTraceQL/spanAttValMatch                 160.4m ± 1%   155.5m ± 6%  -3.04% (p=0.023 n=10)
BackendBlockTraceQL/spanAttValNoMatch               1.182m ± 0%   1.157m ± 1%  -2.12% (p=0.002 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch           112.8m ± 1%   108.6m ± 1%  -3.70% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch         1.181m ± 0%   1.166m ± 0%  -1.24% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch             533.9m ± 1%   512.9m ± 2%  -3.93% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch           2.079m ± 1%   2.064m ± 7%       ~ (p=0.436 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch       65.18m ± 0%   64.36m ± 0%  -1.27% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01    1.023m ± 1%   1.018m ± 1%  -0.48% (p=0.043 n=10)
BackendBlockTraceQL/traceOrMatch                    365.4m ± 5%   353.7m ± 5%  -3.20% (p=0.043 n=10)
BackendBlockTraceQL/traceOrNoMatch                  371.0m ± 0%   359.7m ± 0%  -3.05% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch                 228.1m ± 2%   226.9m ± 0%  -0.49% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd           1.266m ± 0%   1.309m ± 5%  +3.42% (p=0.023 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr            179.9m ± 1%   178.4m ± 0%  -0.86% (p=0.000 n=10)
BackendBlockTraceQL/count                          1003.0m ± 2%   971.8m ± 4%  -3.12% (p=0.035 n=10)
BackendBlockTraceQL/struct                          637.8m ± 8%   615.4m ± 8%       ~ (p=0.218 n=10)
BackendBlockTraceQL/||                              319.8m ± 1%   314.1m ± 3%  -1.77% (p=0.015 n=10)
BackendBlockTraceQL/mixed                           40.32m ± 3%   39.82m ± 0%  -1.24% (p=0.000 n=10)
BackendBlockTraceQL/complex                         1.329m ± 3%   1.312m ± 1%  -1.27% (p=0.001 n=10)
BackendBlockTraceQL/select                          1.304m ± 1%   1.303m ± 1%       ~ (p=0.631 n=10)
geomean                                             34.73m        34.15m       -1.68%

                                                 │    b2.txt    │               a2.txt                │
                                                 │     B/s      │     B/s       vs base               │
BackendBlockTraceQL/spanAttValMatch                230.4Mi ± 1%   237.6Mi ± 5%  +3.13% (p=0.023 n=10)
BackendBlockTraceQL/spanAttValNoMatch              1.755Gi ± 0%   1.793Gi ± 1%  +2.17% (p=0.002 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch          344.5Mi ± 1%   357.7Mi ± 1%  +3.84% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch        1.757Gi ± 0%   1.779Gi ± 0%  +1.25% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch            68.89Mi ± 1%   71.71Mi ± 2%  +4.09% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch          1.240Gi ± 1%   1.249Gi ± 7%       ~ (p=0.436 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch      566.7Mi ± 0%   574.0Mi ± 0%  +1.28% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01   347.0Mi ± 1%   348.7Mi ± 1%  +0.49% (p=0.043 n=10)
BackendBlockTraceQL/traceOrMatch                   5.178Mi ± 5%   5.355Mi ± 5%  +3.41% (p=0.045 n=10)
BackendBlockTraceQL/traceOrNoMatch                 5.102Mi ± 0%   5.264Mi ± 0%  +3.18% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch                15.84Mi ± 2%   15.92Mi ± 0%  +0.48% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd          840.5Mi ± 0%   812.9Mi ± 5%  -3.28% (p=0.023 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr           20.07Mi ± 1%   20.25Mi ± 0%  +0.86% (p=0.000 n=10)
BackendBlockTraceQL/count                          36.60Mi ± 2%   37.78Mi ± 4%  +3.23% (p=0.035 n=10)
BackendBlockTraceQL/struct                         57.09Mi ± 9%   59.18Mi ± 9%       ~ (p=0.218 n=10)
BackendBlockTraceQL/||                             116.2Mi ± 1%   118.3Mi ± 3%  +1.80% (p=0.015 n=10)
BackendBlockTraceQL/mixed                          838.5Mi ± 3%   848.6Mi ± 0%  +1.20% (p=0.000 n=10)
BackendBlockTraceQL/complex                        269.4Mi ± 2%   272.9Mi ± 1%  +1.29% (p=0.001 n=10)
BackendBlockTraceQL/select                         274.7Mi ± 1%   274.8Mi ± 1%       ~ (p=0.617 n=10)
geomean                                            156.1Mi        158.7Mi       +1.71%

                                                 │   b2.txt    │                a2.txt                │
                                                 │  MB_io/op   │  MB_io/op    vs base                 │
BackendBlockTraceQL/spanAttValMatch                 38.75 ± 0%    38.75 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttValNoMatch               2.228 ± 0%    2.228 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicMatch           40.73 ± 0%    40.73 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicNoMatch         2.228 ± 0%    2.228 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValMatch             38.57 ± 0%    38.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValNoMatch           2.769 ± 0%    2.769 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch       38.73 ± 0%    38.73 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch#01   372.2m ± 0%   372.2m ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/traceOrMatch                    1.985 ± 0%    1.985 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/traceOrNoMatch                  1.985 ± 0%    1.985 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValNoMatch                 3.787 ± 0%    3.787 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchAnd           1.116 ± 0%    1.116 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchOr            3.787 ± 0%    3.787 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/count                           38.49 ± 0%    38.49 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/struct                          38.18 ± 0%    38.18 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/||                              38.98 ± 0%    38.98 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixed                           35.45 ± 0%    35.44 ± 0%       ~ (p=0.179 n=10)
BackendBlockTraceQL/complex                        375.5m ± 0%   375.5m ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/select                         375.5m ± 0%   375.5m ± 0%       ~ (p=1.000 n=10) ¹
geomean                                             5.684         5.684       -0.00%
¹ all samples are equal

                                                 │    b2.txt    │                a2.txt                │
                                                 │     B/op     │     B/op      vs base                │
BackendBlockTraceQL/spanAttValMatch                80.81Mi ± 1%   74.04Mi ± 1%   -8.37% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch              907.1Ki ± 0%   905.5Ki ± 0%   -0.18% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch          44.59Mi ± 4%   39.85Mi ± 5%  -10.64% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch        978.9Ki ± 0%   977.3Ki ± 0%   -0.17% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch            593.1Mi ± 0%   567.7Mi ± 0%   -4.27% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch          1.636Mi ± 0%   1.634Mi ± 0%   -0.09% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch      9.104Mi ± 0%   8.515Mi ± 0%   -6.48% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01   880.0Ki ± 0%   878.4Ki ± 0%   -0.18% (p=0.000 n=10)
BackendBlockTraceQL/traceOrMatch                   4.326Mi ± 7%   4.314Mi ± 2%        ~ (p=0.123 n=10)
BackendBlockTraceQL/traceOrNoMatch                 4.314Mi ± 0%   4.311Mi ± 0%   -0.06% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch                961.4Ki ± 0%   959.7Ki ± 0%   -0.17% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd          874.0Ki ± 0%   872.2Ki ± 0%   -0.20% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr           1.104Mi ± 8%   1.102Mi ± 9%        ~ (p=0.182 n=10)
BackendBlockTraceQL/count                          944.2Mi ± 1%   909.1Mi ± 0%   -3.71% (p=0.000 n=10)
BackendBlockTraceQL/struct                         30.57Mi ± 6%   30.55Mi ± 3%        ~ (p=0.739 n=10)
BackendBlockTraceQL/||                             128.5Mi ± 0%   122.9Mi ± 2%   -4.32% (p=0.000 n=10)
BackendBlockTraceQL/mixed                          2.722Mi ± 2%   2.649Mi ± 2%   -2.70% (p=0.000 n=10)
BackendBlockTraceQL/complex                        901.8Ki ± 0%   899.4Ki ± 0%   -0.27% (p=0.000 n=10)
BackendBlockTraceQL/select                         890.7Ki ± 0%   888.8Ki ± 0%   -0.22% (p=0.000 n=10)
geomean                                            6.520Mi        6.371Mi        -2.29%

                                                 │   b2.txt    │                a2.txt                │
                                                 │  allocs/op  │  allocs/op   vs base                 │
BackendBlockTraceQL/spanAttValMatch                753.3k ± 0%   753.3k ± 0%  -0.00% (p=0.034 n=10)
BackendBlockTraceQL/spanAttValNoMatch              12.88k ± 0%   12.88k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicMatch          414.7k ± 0%   414.7k ± 0%       ~ (p=0.054 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch        12.84k ± 0%   12.84k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValMatch            3.505M ± 0%   3.505M ± 0%       ~ (p=0.492 n=10)
BackendBlockTraceQL/resourceAttValNoMatch          12.94k ± 0%   12.94k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch      116.0k ± 0%   116.0k ± 0%       ~ (p=0.474 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01   12.87k ± 0%   12.87k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/traceOrMatch                   104.9k ± 3%   104.8k ± 2%       ~ (p=0.739 n=10)
BackendBlockTraceQL/traceOrNoMatch                 104.7k ± 0%   104.7k ± 0%       ~ (p=0.224 n=10)
BackendBlockTraceQL/mixedValNoMatch                13.70k ± 0%   13.70k ± 0%       ~ (p=1.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd          12.91k ± 0%   12.91k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchOr           13.70k ± 0%   13.70k ± 0%       ~ (p=0.070 n=10)
BackendBlockTraceQL/count                          6.696M ± 0%   6.696M ± 0%  -0.00% (p=0.012 n=10)
BackendBlockTraceQL/struct                         293.6k ± 4%   293.6k ± 4%       ~ (p=0.987 n=10)
BackendBlockTraceQL/||                             818.0k ± 0%   818.0k ± 0%       ~ (p=0.144 n=10)
BackendBlockTraceQL/mixed                          27.57k ± 0%   27.57k ± 0%       ~ (p=0.611 n=10)
BackendBlockTraceQL/complex                        13.27k ± 0%   13.27k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/select                         13.15k ± 0%   13.15k ± 0%       ~ (p=1.000 n=10) ¹
geomean                                            77.13k        77.13k       -0.00%
Benchmark Metrics
                                                                                                       │   b1.txt    │               a1.txt                │
                                                                                                       │   sec/op    │   sec/op     vs base                │
BackendBlockQueryRange/{}_|_rate()/5                                                                     85.54m ± 1%   83.47m ± 1%   -2.42% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          191.1m ± 1%   186.8m ± 1%   -2.29% (p=0.002 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          121.8m ± 0%   116.4m ± 0%   -4.48% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                  1.611m ± 1%   1.572m ± 2%   -2.42% (p=0.001 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                11.00m ± 0%   10.72m ± 0%   -2.62% (p=0.000 n=10)
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5   13.20m ± 0%   13.17m ± 1%   -0.23% (p=0.029 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         11.58m ± 0%   11.35m ± 0%   -1.95% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  174.2m ± 0%   173.4m ± 0%   -0.45% (p=0.002 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               278.6m ± 1%   274.4m ± 0%   -1.49% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              174.8m ± 0%   174.6m ± 1%        ~ (p=1.000 n=10)
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         228.4m ± 0%   224.8m ± 0%   -1.57% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         231.5m ± 1%   228.8m ± 0%   -1.19% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         231.7m ± 0%   229.2m ± 0%   -1.08% (p=0.001 n=10)
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                        2.929 ± 2%    2.618 ± 2%  -10.61% (p=0.000 n=10)
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      366.3m ± 2%   361.4m ± 1%   -1.33% (p=0.009 n=10)
geomean                                                                                                  96.67m        94.43m        -2.31%

                                                                                                       │   b1.txt   │               a1.txt                │
                                                                                                       │  MB_IO/op  │  MB_IO/op   vs base                 │
BackendBlockQueryRange/{}_|_rate()/5                                                                     2.922 ± 0%   2.922 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          3.073 ± 0%   3.073 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          2.961 ± 0%   2.961 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                  1.437 ± 0%   1.437 ± 0%       ~ (p=1.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                2.954 ± 0%   2.954 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5   3.470 ± 0%   3.470 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         3.079 ± 0%   3.079 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  5.555 ± 0%   5.555 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               5.705 ± 0%   5.705 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              5.555 ± 0%   5.555 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         5.702 ± 0%   5.702 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         5.702 ± 0%   5.702 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         5.702 ± 0%   5.702 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                       19.60 ± 0%   19.60 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      5.906 ± 0%   5.906 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                                                                  4.405        4.405       +0.00%
¹ all samples are equal

                                                                                                       │     b1.txt     │                a1.txt                 │
                                                                                                       │    spans/op    │   spans/op    vs base                 │
BackendBlockQueryRange/{}_|_rate()/5                                                                     819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                   388.4 ± 16%      370.5 ± 20%       ~ (p=0.072 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                21.92k ±  0%     21.92k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5    0.000 ±  0%      0.000 ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         3.231k ±  0%     3.231k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                       819.6k ±  0%     819.6k ±  0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      512.6k ±  0%     512.6k ±  0%       ~ (p=1.000 n=10) ¹
geomean                                                                                                               ²                 -0.31%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                                                       │     b1.txt     │                 a1.txt                 │
                                                                                                       │    spans/s     │   spans/s     vs base                  │
BackendBlockQueryRange/{}_|_rate()/5                                                                     9.582M ±  1%     9.819M ±  1%   +2.48% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          4.288M ±  1%     4.389M ±  1%   +2.35% (p=0.002 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          6.729M ±  0%     7.045M ±  0%   +4.69% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                  237.6k ± 17%     237.5k ± 17%        ~ (p=1.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                1.992M ±  0%     2.046M ±  0%   +2.69% (p=0.000 n=10)
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         279.0k ±  0%     284.6k ±  0%   +1.99% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  4.705M ±  0%     4.726M ±  0%   +0.45% (p=0.002 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               2.942M ±  1%     2.987M ±  0%   +1.51% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              4.689M ±  0%     4.693M ±  1%        ~ (p=1.000 n=10)
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         3.589M ±  0%     3.647M ±  0%   +1.59% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         3.540M ±  1%     3.583M ±  0%   +1.20% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         3.538M ±  0%     3.577M ±  0%   +1.09% (p=0.001 n=10)
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                       279.8k ±  2%     313.0k ±  2%  +11.87% (p=0.000 n=10)
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      1.400M ±  2%     1.418M ±  1%   +1.35% (p=0.009 n=10)
geomean                                                                                                               ²                  +2.18%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                                                       │    b1.txt     │                a1.txt                │
                                                                                                       │     B/op      │     B/op       vs base               │
BackendBlockQueryRange/{}_|_rate()/5                                                                     996.0Ki ±  0%   995.9Ki ±  0%  -0.01% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          2.580Mi ±  1%   2.580Mi ±  1%       ~ (p=0.280 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          991.4Ki ±  0%   991.2Ki ±  0%  -0.01% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                  1.867Mi ±  0%   1.865Mi ±  0%       ~ (p=0.089 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                3.557Mi ±  1%   3.459Mi ±  0%  -2.76% (p=0.000 n=10)
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5   1.212Mi ±  1%   1.212Mi ±  0%       ~ (p=0.796 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         887.5Ki ±  0%   887.4Ki ±  0%       ~ (p=0.579 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  1.026Mi ±  0%   1.026Mi ±  0%  -0.02% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               2.982Mi ±  1%   2.955Mi ±  1%       ~ (p=0.382 n=10)
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              1.026Mi ±  0%   1.026Mi ±  0%  -0.02% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         2.698Mi ±  2%   2.704Mi ±  1%       ~ (p=0.723 n=10)
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         2.724Mi ±  1%   2.703Mi ±  1%       ~ (p=0.123 n=10)
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         2.703Mi ±  1%   2.702Mi ±  1%       ~ (p=0.481 n=10)
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                       253.4Mi ± 11%   251.5Mi ± 28%       ~ (p=0.481 n=10)
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      49.28Mi ±  1%   49.34Mi ±  1%       ~ (p=0.739 n=10)
geomean                                                                                                  2.983Mi         2.973Mi        -0.34%

                                                                                                       │   b1.txt    │               a1.txt               │
                                                                                                       │  allocs/op  │  allocs/op   vs base               │
BackendBlockQueryRange/{}_|_rate()/5                                                                     12.86k ± 0%   12.86k ± 0%       ~ (p=0.474 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.status_code)/5                                          33.04k ± 1%   33.04k ± 1%       ~ (p=0.830 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5                                          13.06k ± 0%   13.06k ± 0%       ~ (p=1.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5                                                  12.73k ± 0%   12.73k ± 0%       ~ (p=0.097 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5                                28.32k ± 0%   28.32k ± 0%  -0.01% (p=0.012 n=10)
BackendBlockQueryRange/{span.http.host_!=_``_&&_span.http.flavor=`2`}_|_rate()_by_(span.http.flavor)/5   13.04k ± 0%   13.04k ± 0%       ~ (p=0.232 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5                                                         13.81k ± 0%   13.81k ± 0%       ~ (p=1.000 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99,_.9,_.5)/5                                  13.28k ± 0%   13.28k ± 0%       ~ (p=0.593 n=10)
BackendBlockQueryRange/{}_|_quantile_over_time(duration,_.99)_by_(span.http.status_code)/5               33.69k ± 1%   33.69k ± 1%       ~ (p=0.783 n=10)
BackendBlockQueryRange/{}_|_histogram_over_time(duration)/5                                              13.28k ± 0%   13.28k ± 0%       ~ (p=0.370 n=10)
BackendBlockQueryRange/{}_|_avg_over_time(duration)_by_(span.http.status_code)/5                         33.39k ± 0%   33.39k ± 0%       ~ (p=0.504 n=10)
BackendBlockQueryRange/{}_|_max_over_time(duration)_by_(span.http.status_code)/5                         33.41k ± 0%   33.41k ± 0%       ~ (p=0.583 n=10)
BackendBlockQueryRange/{}_|_min_over_time(duration)_by_(span.http.status_code)/5                         33.41k ± 0%   33.41k ± 0%       ~ (p=0.484 n=10)
BackendBlockQueryRange/{_name_!=_nil_}_|_compare({status=error})/5                                       1.700M ± 3%   1.700M ± 7%       ~ (p=0.912 n=10)
BackendBlockQueryRange/{}_>_{}_|_rate()_by_(name)/5                                                      81.35k ± 3%   82.39k ± 3%       ~ (p=0.985 n=10)
geomean                                                                                                  29.48k        29.50k       +0.08%

Which issue(s) this PR fixes:
Fixes #

Checklist

  • Tests updated
  • Documentation added
  • CHANGELOG.md updated - the order of entries should be [CHANGE], [FEATURE], [ENHANCEMENT], [BUGFIX]

import "fmt"

type AttributeScope int
type AttributeScope int8
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice is not byte more idiomatic?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usually I think of byte as arbitrary data. Here int8 reads as an enum with up to 256 values. If I saw a type aliased to byte I would expect custom parsing code relying on it somewhere. But happy to change if there if that approach is in wider use.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine to me, I wasn't sure either

@mdisibio mdisibio merged commit eb45d52 into grafana:main Jun 9, 2025
21 checks passed
knylander-grafana pushed a commit that referenced this pull request Jun 11, 2025
* Reduce size of traceql Attribute struct and realign

* changelog
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants