What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
A high-cardinality label can create a separate time series for every distinct combination of its values and the labels already present. That can expand index state and memory use, while adding a million samples to existing series does not necessarily create any new series. The title’s comparison is a warning about this fanout—not a universal cost ratio: the actual impact depends on the database, data, and workload.
What cardinality counts—and what it doesn’t
Cardinality is the number of distinct time series, not the number of samples, rows, or measurements ingested. A series holds observations over time. More observations for an existing series increase its sample count; a new combination of identifying labels creates another series.
As an Amazon Associate I earn from qualifying purchases.
In Prometheus-style systems, a metric name and its label values identify a series. Prometheus puts it plainly: “Remember that every unique combination of key-value label pairs represents a new time series, which can dramatically increase the amount of data stored.” See the Prometheus guidance on metric and label naming.
The precise meaning of an indexed dimension varies by engine. In InfluxDB Cloud TSM, measurements, tags, and field keys are indexed, and each unique set of indexed elements forms a series key. That model is described in InfluxData’s high-series-cardinality guide.
#1 Best Overall
How one label can multiply series
Imagine a metric identified by service and operation. If you add user_id, each distinct user ID observed for a service/operation combination can make a distinct series. A label with many values can therefore fan out across combinations that already exist. It does not always add just one series, and the multiplication depends on which combinations occur in the data.
By contrast, another sample with the same metric and label values belongs to an existing series. This is why a large sample increase and a cardinality increase are different changes: one adds observations; the other may expand the set of series and the index entries needed to find them.
Why series growth can affect storage and performance
Index state and memory
Prometheus’s local storage uses a block index to map metric names and labels to time-series chunks; the current incoming block is held in memory before it is fully persisted. The Prometheus storage documentation explains this structure. Other engines implement indexes differently, so the exact resource cost is not interchangeable across products.
Recommended Free Tools
VictoriaMetrics says its index stores data per label for each registered time series, and that index size grows with series count and total label length. Its documentation also describes memory use and potentially slower inserts when active-series information does not fit in the in-memory cache. InfluxData likewise identifies high series cardinality as a primary memory-use driver for many workloads. These are implementation-specific behaviors, not a universal price per series.
Rank #3
- Perfect Gift for Data Analysts – A fun and unique desk sign for business intelligence experts, data scientists, and analytics professionals.
- Bold & Readable Design – High-contrast lettering ensures visibility on any desk, making it an instant conversation starter.
- Compact & Lightweight – Small enough to fit any workspace without taking up too much room but big enough to make an impact.
- Durable & Long-Lasting Material – Made with premium materials to withstand daily office use while maintaining its sleek look.
- Great for Any Occasion – Ideal for birthdays, work anniversaries, promotions, or just a fun appreciation gift for number crunchers
Churn as well as active cardinality
A large but stable set of active series is different from churn: churn is the rate at which new series are created. A changing identifier such as a pod name can make a replacement series after a redeployment, even if the service’s logical role has not changed. That can add ongoing index and compute work as old and new series coexist or turn over.
VictoriaMetrics’ capacity guide illustrates the distinction with an example: 1,000 series per service across 100 replicas yields 100,000 active series; if pod names change on redeployment, the guide’s example can produce another 100,000 new series. It is an illustration from that guide, not a general deployment estimate. See VictoriaMetrics’ setup-sizing guide.
Rank #4
Which labels deserve scrutiny?
Risk rises when a label can take on a very large or continually growing set of values. Common candidates include:
- User IDs, email addresses, query IDs, hashes, and UUIDs.
- Full URLs, IP addresses, log text, or other values that vary per request or event.
- Timestamps or timestamp-like values that make nearly every observation unique.
- Ephemeral infrastructure identifiers, such as pod names that change during redeployments.
A label is not automatically a problem because it has many values. Its usefulness for filtering or aggregation matters too. The practical question is whether the diagnostic value justifies the series it creates and the resulting query and storage burden.
How to find and reduce high-cardinality dimensions
- Measure cardinality. InfluxDB documents
influxdb.cardinality()andSHOW SERIES CARDINALITY, as well as ways to count distinct values per tag. Use the option supported by your engine to identify which measurements and dimensions contribute most. - Inspect value distributions and growth. Look for unique or rapidly expanding identifiers, not only the current total. A dimension that changes with every request or deployment can create churn even when a snapshot looks manageable.
- Remove labels that do not support a real query need. If an unbounded identifier is not needed for filtering or aggregation, do not store it as a series-identifying label. Preserve useful bounded dimensions, such as service or operation, when they answer operational questions.
- Pre-aggregate when detail is not required. VictoriaMetrics recommends pre-aggregation when volatile labels cannot be removed. This trades away per-identifier detail, so apply it only where the queries do not need that detail.
- Test with representative reads and writes. Capacity depends on active series, churn, ingestion rate, query patterns, and retention. VictoriaMetrics cautions that active series and ingestion alone are not enough to predict compute needs; test the workload you intend to run.
How to compare time-series systems for this workload
Do not select a database from a generic “series per machine” or “samples per second” headline alone. Compare the systems against the shape of your data and the questions you need to answer.
- Series identity: Determine which measurements, tags, labels, or fields create distinct series or index entries.
- Index and memory behavior: Check how active-series count and label length affect memory and index size in the specific engine.
- Churn handling: Consider whether ephemeral identifiers continually create new series in your deployment model.
- Workload: Include ingestion rate, query shapes, retention, active-series levels, and growth in your test.
- Operational controls: Look for cardinality inspection tools and supported options for filtering labels or pre-aggregating data.
The available vendor documentation does not establish a neutral, broadly applicable cost-per-series number or prove that one indexed column always costs more than a million rows. Treat that comparison as a reminder to investigate fanout, then validate the effect on your own schema and workload.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




