InfluxDB 3 Core Benchmarks: QuestDB Comparison
Performance benchmarks comparing InfluxDB 3 Core against QuestDB 9.3.3 using the industry-standard TSBS benchmark suite.
This article benchmarks InfluxDB 3 Core against QuestDB 9.3.3. InfluxDB 3 Core, which reached general availability in April 2025, is a complete rewrite of InfluxDB using Apache Arrow and DataFusion.
Key results: QuestDB ingests 7 to 8.6 million rows per second at every cardinality we tested; InfluxDB 3 Core holds a flat 319K. On queries, InfluxDB 3 Core is slower than QuestDB on every type and slower than InfluxDB v1 and v2 on most. Simple one-hour aggregations take around 55 ms against QuestDB's sub-millisecond, and the full-table scan is the one place the two are close, 1.24 s against 1.03 s.
For InfluxDB v1/v2 benchmarks and detailed architecture comparison, see QuestDB vs InfluxDB.
These benchmarks predate QWP, the binary protocol we shipped in QuestDB 10.0 in August 2026. Ingestion here runs over InfluxDB Line Protocol, a text format the server parses row by row. QWP sends binary columns instead, up to 3.6x faster over a network, and it streams reads back as Arrow. Read the QuestDB figures below as a floor.
About InfluxDB 3 Core
InfluxDB 3 Core represents a major architectural shift for InfluxDB:
- Complete rewrite in Rust (previously Go)
- Apache Arrow for in-memory data representation
- DataFusion query engine (Apache Arrow's SQL query engine)
- Parquet for storage format
- Arrow Flight for query protocol (gRPC-based)
It is a different database from v1 and v2, built around columnar processing for analytical queries.
Performance benchmarks
We use the open-source, industry-standard Time Series Benchmark Suite (TSBS) for all benchmarks. TSBS was created by Timescale and has seen no real development upstream since 2023, so we maintain our own fork. We extended the InfluxDB query runner to support v3 via Arrow Flight using the official influxdb3-go client library.
Hardware: AWS EC2 r8a.8xlarge (32 vCPU, 256 GB RAM, AMD EPYC), GP3 EBS storage (20,000 IOPS, 1 GB/s throughput)
Software:
- Ubuntu 22.04
- InfluxDB 3 Core 3.10.0
- QuestDB 9.3.3
Measured: InfluxDB 3 Core 3.10.0, benchmarked August 2026. QuestDB 9.3.3, on the same r8a.8xlarge instance. New benchmarks on QuestDB 10.0 are coming.
Core allocation: the TSBS client and the database run on the same instance with no CPU pinning.
Query statistic: each figure is the median latency within a run, averaged over 3 runs, with a warm query cache. InfluxDB 3 Core ran 50 queries per type where QuestDB ran 1,000, because at the full count it did not complete a pass in 18 hours. Its query figures carry correspondingly less statistical confidence.
Ingestion benchmark
We test a cpu-only scenario across four cardinality levels, from 1,000 to 1M simulated hosts. We start at 1,000 hosts. Smaller datasets finish in under a second on the faster engines, where setup cost dominates and the result stops measuring throughput.
Example commands:
$ ./tsbs_generate_data --use-case="cpu-only" --seed=123 --scale=4000 \--timestamp-start="2016-01-01T00:00:00Z" \--timestamp-end="2016-01-03T00:00:00Z" \--log-interval="10s" --format="influx" > /tmp/influx_data$ ./tsbs_load_influx --db-name=benchmark --file=/tmp/influx_data \--urls=http://localhost:8181 --workers=32
The same data, seed and worker count against QuestDB:
$ ./tsbs_generate_data --use-case="cpu-only" --seed=123 --scale=4000 \--timestamp-start="2016-01-01T00:00:00Z" \--timestamp-end="2016-01-03T00:00:00Z" \--log-interval="10s" --format="questdb" > /tmp/questdb_data$ ./tsbs_load_questdb --file=/tmp/questdb_data --workers=32
Neither loader is given a batch-size flag, so both run the TSBS default of 10,000 rows per batch.
The results for ingestion with 32 workers:
↑ Higher is better
QuestDB peak rows/sec, at 100K hosts
InfluxDB 3 Core peak rows/sec, at 1K hosts
| Scale | InfluxDB 3 Core | QuestDB | QuestDB Advantage |
|---|---|---|---|
| 1,000 hosts | 319K rows/sec | 7.77M rows/sec | 24.3x faster |
| 4,000 hosts | 319K rows/sec | 7.96M rows/sec | 24.9x faster |
| 100,000 hosts | 319K rows/sec | 8.59M rows/sec | 26.9x faster |
| 1,000,000 hosts | 317K rows/sec | 7.14M rows/sec | 22.5x faster |
Key observations:
- InfluxDB 3 Core shows constant ~319K rows/sec regardless of cardinality (1,000 to 1M hosts)
- QuestDB holds 7.1M to 8.6M rows/sec across the whole range, peaking at 100K hosts
Query performance
All queries run with a single worker to measure per-query latency.
Dataset: cpu-only scenario, 4,000 hosts, 10-second intervals, 2 days of data (~69M rows)
The TSBS suite has six families:
- single-groupby: Aggregate CPU metrics for random hosts over specified time ranges
- double-groupby: Aggregate across ALL hosts, grouped by host and time intervals
- cpu-max-all: Maximum of all ten CPU metrics across 1, 8 or 32 hosts
- high-cpu-1 and high-cpu-all: Hosts with CPU utilization above a threshold, for one host and for the full table
- lastpoint: The most recent reading for every host
- groupby-orderby-limit: Top-N aggregation over a time range
To run the benchmark:
$ ./tsbs_generate_queries --use-case="devops" --seed=123 --scale=4000 \--timestamp-start="2016-01-01T00:00:00Z" \--timestamp-end="2016-01-03T00:00:00Z" \--queries=1000 --query-type="single-groupby-1-1-1" \--format="influx" > /tmp/influx_query$ ./tsbs_run_queries_influx --file=/tmp/influx_query \--db-name=benchmark --workers=1
And against QuestDB:
$ ./tsbs_generate_queries --use-case="devops" --seed=123 --scale=4000 \--timestamp-start="2016-01-01T00:00:00Z" \--timestamp-end="2016-01-03T00:00:00Z" \--queries=1000 --query-type="single-groupby-1-1-1" \--format="questdb" > /tmp/questdb_query$ ./tsbs_run_queries_questdb --file=/tmp/questdb_query --workers=1
Single-groupby queries
Query names encode metrics, hosts and hours: 5-8-1 is five metrics, eight hosts, one hour. Every query on this page is described in the appendix.
↓ Lower is better
Query format: metrics-hosts-hours · median of 3 runs, warm cache
QuestDB, single-groupby-5-1-12
InfluxDB 3 Core, single-groupby-5-1-12
| Query | InfluxDB 3 Core | QuestDB | Comparison |
|---|---|---|---|
| single-groupby-1-1-1 | 54.88 ms | 0.41 ms | QuestDB 134x faster |
| single-groupby-1-1-12 | 641.19 ms | 1.43 ms | QuestDB 448x faster |
| single-groupby-1-8-1 | 56.62 ms | 0.91 ms | QuestDB 62x faster |
| single-groupby-5-1-1 | 60.91 ms | 0.60 ms | QuestDB 102x faster |
| single-groupby-5-1-12 | 634.44 ms | 1.94 ms | QuestDB 327x faster |
| single-groupby-5-8-1 | 63.80 ms | 1.17 ms | QuestDB 55x faster |
Double-groupby queries
↓ Lower is better
Aggregates across ALL hosts, grouped by host and 1-hour intervals · median of 3 runs, warm cache
QuestDB, double-groupby-all
InfluxDB 3 Core, double-groupby-all
| Query | InfluxDB 3 Core | QuestDB | Comparison |
|---|---|---|---|
| double-groupby-1 | 1,382.80 ms | 32.20 ms | QuestDB 43x faster |
| double-groupby-5 | 1,411.10 ms | 41.20 ms | QuestDB 34x faster |
| double-groupby-all | 1,454.80 ms | 56.10 ms | QuestDB 26x faster |
CPU-max-all and high-cpu queries
↓ Lower is better
Filtered scans over 1, 8 and 32 hosts
QuestDB, cpu-max-all-32-24
InfluxDB 3 Core, cpu-max-all-32-24
| Query | InfluxDB 3 Core | QuestDB | Comparison |
|---|---|---|---|
| cpu-max-all-1 | 454.16 ms | 1.48 ms | QuestDB 307x faster |
| cpu-max-all-8 | 447.88 ms | 5.40 ms | QuestDB 83x faster |
| cpu-max-all-32-24 | 1,067.90 ms | 5.37 ms | QuestDB 199x faster |
| high-cpu-1 | 652.77 ms | 3.31 ms | QuestDB 197x faster |
Lastpoint and top-N queries
↓ Lower is better
Latest reading per host, and top-N aggregation
QuestDB, lastpoint
InfluxDB 3 Core, lastpoint
QuestDB, groupby-orderby-limit
| Query | InfluxDB 3 Core | QuestDB | Comparison |
|---|---|---|---|
| lastpoint | 54,076 ms | 1.70 ms | QuestDB 1.7 ms vs 54 seconds |
| groupby-orderby-limit | 16,192.51 ms | 16.76 ms | QuestDB 966x faster |
lastpoint fetches the most recent reading for every host. QuestDB answers it in
1.7 ms with LATEST ON. InfluxDB 3 Core takes 54
seconds, which is why it ran 50 queries per type here rather than the 1,000 used
for QuestDB: at the full count a single pass did not finish.
Heavy queries
high-cpu-all query latency · ↓ Lower is better
Full table scan finding hosts with CPU utilization above threshold · median of 3 runs, warm cache
QuestDB, high-cpu-all
InfluxDB 3 Core, high-cpu-all
| Query | InfluxDB 3 Core | QuestDB | Comparison |
|---|---|---|---|
| high-cpu-all | 1,242.62 ms | 1,027.50 ms | QuestDB 1.2x faster |
NB: QuestDB 10.0 was measured in the same run. Over QWP, its new binary protocol, it answers high-cpu-all in 672.60 ms. The tables on this page stay on 9.3.3, the version the whole suite was run against; full 10.0 results will come with our next benchmark suite rather than a TSBS re-run.
Explaining performance differences
InfluxDB 3 Core observations
Ingestion: The consistent ~319K rows/sec throughput across all cardinality levels suggests the bottleneck is not related to series management (unlike v1/v2) but rather in the write path itself, possibly WAL handling, Parquet encoding, or HTTP request processing.
Queries: Results show consistent ~55-65 ms latency for simple 1-hour queries regardless of the number of metrics or hosts queried. This suggests a fixed per-query overhead, possibly from:
- Arrow Flight connection/protocol overhead
- DataFusion query planning
Longer time ranges (12-hour queries) scale linearly with data volume, reaching ~630-640 ms. The heavy analytical query (high-cpu-all) has improved sharply in recent releases, from more than 16 seconds to 1.2 seconds.
Comparison with InfluxDB v1/v2
InfluxDB 3 Core is slower than InfluxDB v1 and v2 on most of this suite:
| Metric | InfluxDB v1 | InfluxDB v2 | InfluxDB 3 Core |
|---|---|---|---|
| Ingestion (4K hosts) | 856K rows/sec | 503K rows/sec | 319K rows/sec |
| single-groupby-1-1-1 | 0.31 ms | 0.59 ms | 54.88 ms |
| double-groupby-1 | 985 ms | 1,037 ms | 1,382.80 ms |
| high-cpu-all | 15,430.5 ms | 16,050.2 ms | 1,242.62 ms |
The Arrow and DataFusion stack is young; expect it to improve.
QuestDB performance
QuestDB maintains sub-2 ms latency on single-groupby queries and 32-56 ms on full-table double-groupby aggregations. Ingestion peaks at 8.59M rows/sec at 100K hosts.
Conclusion
InfluxDB 3 Core is InfluxData's bet on the Apache Arrow ecosystem. Today it is slower than both QuestDB and the older InfluxDB versions on most of this suite, but the foundation (Arrow, DataFusion, Parquet) is sound, and the cardinality-based degradation of v1 and v2 is gone.
QuestDB ingests several times faster and answers most queries in a fraction of the time. Where ingestion throughput and query latency matter, it is the faster choice.
We will re-run this on new InfluxDB 3 Core releases.
Ready to try QuestDB? Get started with the quickstart guide or join our Slack community.
Appendix: what each TSBS query does
Query names encode their parameters: single-groupby-5-8-1 is five metrics, eight hosts, one hour.
| Query | What it measures |
|---|---|
| single-groupby-M-H-T | Maximum of M CPU metrics for H random hosts, in 5-minute buckets over T hours. 1-1-1 is one metric, one host, one hour; the -12 variants cover twelve hours |
| double-groupby-M | Average of M CPU metrics for every host, grouped by host and by hour, over 24 hours. all is all ten metrics |
| cpu-max-all-H | Maximum of all ten CPU metrics for H random hosts, per hour. -1 and -8 cover one hour; -32-24 covers 32 hosts over 24 hours |
| high-cpu-1 | Every reading where one metric is above a threshold, for one random host |
| high-cpu-all | The same threshold scan across every host, which is a full-table scan |
| lastpoint | The most recent reading for every host |
| groupby-orderby-limit | The last five per-minute aggregates before a random point in time, ordered by time, a top-N query |
Definitions follow the TSBS README. Every query is generated with seed 123 against the 4,000-host dataset, so each engine answers the same random hosts and time ranges.