You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Series limit isn't applied in SQL for metric charts: every series is fetched, then capped in the browser #3502
So a top-N metric chart on a high-cardinality attribute reads, aggregates and transfers every series, then the browser draws N of them. On our deployment:
a top-20 chart over a histogram with ~280 groups read 76 GB;
a top-10 chart over a sum with ~2,700 groups hit our 8 GiB per-query memory limit.
Expected: metric charts return the top N series from SQL, as log and trace charts do. The ranking could run on the per-series values after the metric CTEs, before the final pivot.
Related: #3204 (how the top N is picked across chunks).
Steps to reproduce
Reproduces on play.hyperdx.io? Didn't try.
An integration test in the style of renderChartConfig.int.test.ts, on main:
Insert a gauge, a cumulative sum and a cumulative histogram repro.many for hosts h1–h5 (ResourceAttributes['host']).
renderChartConfig with groupBy: "ResourceAttributes['host']", seriesLimit: 2, granularity: '5 minute', and one select of each metric type in turn.
Each query returns all 5 hosts. The same config on a log source with groupBy: 'ServiceName' returns 2.
How are you running HyperDX?
Helm (ClickStack chart 2.1.0) with the hyperdx:2-nightly image (2.42.0 plus the Node bump from #3456), our own ClickHouse 26.2.5.45. Reproduced on main2bfc630.
Where does it show up?
Dashboard time charts on metric sources with "Top N series"; we saw the cost through the MCP tools and in system.query_log.
Debug info
N/A.
Logs
None.
Written with help from an AI assistant (Claude Code). The behaviour comes from our own deployment and an integration test on main.
Activity
fix(common-utils): skip metric points that have no recorded value (#3583