Benchmarks
Every run loads the same randomized data into a single Logs process on MinIO, next to Loki, then sends both the same randomized LogQL queries. Each answer is checked for correctness and timed. The newest run is shown by default.
| Query family | Cases | p99 latency | p50 ratio | Non-match |
|---|---|---|---|---|
| logql.metric.range | 3,231 | 341 ms 1.1 s | 0.47× | 154 |
| logql.metric.instant | 1,922 | 151 ms 195 ms | 0.67× | 88 |
| logql.log.parsed | 1,497 | 191 ms 402 ms | 0.50× | 17 |
| logql.log | 1,191 | 179 ms 385 ms | 0.60× | 26 |
| logql.log.parsed.limited | 348 | 126 ms 120 ms | 0.67× | 7 |
| logql.labels | 341 | 39.8 ms 28.2 ms | 0.49× | 0 |
| logql.label_values | 314 | 40.1 ms 28.6 ms | 0.55× | 47 |
| logql.log.limited | 310 | 210 ms 115 ms | 0.86× | 14 |
- match8,801
- both error223
- inconclusive69
- oracle unstable47
- oracle error6
- oracle timeout6
- mismatch2
How runs are measured
The differential fuzzer in tests/regression/harness/fuzz runs both systems on one Docker host, each pinned to its own CPU set. A run fails on any mismatch, implementation error or timeout, unstable implementation answer, or rejected write. The recent scenario queries data still being ingested; historical queries older data that has been flushed to object storage, with artificial latency added to MinIO.
To record a new run from the repository root:
PYTHONPATH=tests/regression mise exec -- python -m harness.fuzz.bench --products logs --duration 30mResults land in documentation/benchmarks/fuzz and appear here on the next docs build.