Repository navigation
Full-history query benchmark commands — reads across all data types #856
Description
TL;DR
#771 was re-scoped to ingestion benchmarks; this issue carries the query half. Rewire the rpc-hack read benches onto the production store readers as a bench-query subcommand next to bench-ingest, reusing #771's CSV sink and reporting format. Together with #771 this completes the original scope (and #730's).
Scope
- The eight read benches from the prototype: {hot,cold} × {ledgers, txpage, txhash, events}.
- Measure the production read paths in
internal/fullhistory/storage/stores/— e.g.eventstore/query.go+cold_reader.go,ledger/cold_reader.go+hot_store.go,txhash/read_assembly.go+cold_reader.go— not the prototype's own reader implementations (same rewiring principle as Full-history benchmark commands — ingest across all data types #771). - Cold event/txhash benches must measure the complete correct read, including the MPHF post-filter — an index probe alone benchmarks a correctness bug, not a query.
--query-concurrencysweeps and the grid runner (concurrency × data type matrix).- Events query-corpus auto-generation: derive realistic contract-ID/topic terms from the ingested data rather than hand-picked constants.
- XDR-views only (the decided path; no views-vs-decode comparison).
- CSV output in Full-history benchmark commands — ingest across all data types #771's schema (
stage,n,n_items,total_ns,p50_ns,p90_ns,p99_ns,max_ns) so Run full-history benchmark commands in CI to catch perf regressions #775 can consume ingest and query reports uniformly. - Land on
feature/full-historyat mergeable quality.
Source
rpc-hack scripts/bench-fullhistory/: bench_{cold,hot}_*.go, bench_grid.go, bench_concurrent_runner.go, corpus.go, and the cache-eviction helpers (cold read numbers are meaningless against a warm page cache). Carry the harness and methodology; leave the prototype's reader code behind.
Reuses from #771
internal/fullhistory/bench/ — the cobra subcommand pattern, the CSV/percentile sink, and the fixture/source plumbing. Benchmark inputs (a populated hot DB / frozen cold chunks) can be produced by bench-ingest itself.
Out of scope
- CI harness and baselines (Run full-history benchmark commands in CI to catch perf regressions #775 — blocked on this + Full-history benchmark commands — ingest across all data types #771).
- Ingestion benchmarks (Full-history benchmark commands — ingest across all data types #771).
- Scenario suite (Implement the RPC v2 performance benchmark suite (data profiles + test scenarios) #776).
Dependencies
- Full-history benchmark commands — ingest across all data types #771's bench package (subcommand plumbing + CSV sink) — PR pending.
- Production cold/hot readers in
storage/stores/(landed).
PR stack for this issue, in merge order:
Metadata
Metadata
Assignees
Type
Projects
- StatusShow more project fieldsNeeds Review
Activity
fullhistory: add bench-query subcommand for query benchmarks (stellar…
fullhistory: add bench-query subcommand for query benchmarks (stellar…
fullhistory: add bench-ingest subcommand for ingestion benchmarks (#771…
fullhistory: add bench-query subcommand for query benchmarks (stellar…
[-]Full-history query benchmark commands — reads across all data types (split from #771)[/-][+]Full-history query benchmark commands — reads across all data types [/+]14 remaining items
bench(full-history): refuse a query campaign with no hot ingest
bench(full-history): the bench-query skeleton and its report contract
bench(full-history): measure the four read types through the read view
bench(full-history): refuse a query campaign with no hot ingest
marwen-abid commentedon Oct 5, 2026
PR stack for this issue, in merge order:
bench(full-history): the bench-query skeleton and its report contract
bench(full-history): measure the four read types through the read view
bench(full-history): refuse a query campaign with no hot ingest
bench(full-history): refuse a query campaign with no hot ingest