Skip to Content
Benchmarks

Benchmarks

KoldStore is a storage lifecycle tool — not a universal query accelerator. The primary published wins are footprint and whole-table maintenance after flush. DML and cold-path lookups are contextual single samples, not release guarantees.

Source sample: 10M wide rows, hot_row_limit = 100000, local PostgreSQL 16.13 (release-pg), 2026-08-01, single wiped pgrx instance per side. Foreground INSERT uses equalized WAL retention so it is not marketed as a speedup. Full tables live in the repo: docs/benchmarks/RESULTS.md .

Product page summary: /koldstore.

pgrx benchmark report archive

The repository keeps browser-ready pgrx benchmark reports by PostgreSQL version and UTC date-hour. Browse the benchmark results archive  or open its HTML index .

Storage and maintenance wins

ResultBefore → after flushTrade-off
Total footprint (hot + cold)5.85 GiB → 671 MiB89% smaller
Hot in PostgreSQL (heap + __cl)5.85 GiB → 72 MiB99% smaller
Cold Parquet— → ~599 MiBOutside the database
Indexes (hot + __cl)415 MiB → 11.5 MiB97% smaller
VACUUM (FULL, ANALYZE)158.7 s → 3.24 s~49× faster

The VACUUM timing is specifically VACUUM (FULL, ANALYZE) — a whole-table rewrite. Routine autovacuum was disabled for the benchmark and is not covered by that number. Managed PostgreSQL sizes include the hot heap and koldstore.<table>__cl plus its indexes.

DML and query path (contextual)

Foreground DML and PK lookups are not guaranteed to improve. Mirror apply is reported separately as catch-up.

OperationPostgreSQL onlyKoldStore (WAL)Notes
INSERT100,809 ops/s100,818 ops/s≈ identical (fair WAL-retention seed)
UPDATE81,791 ops/s55,164 ops/sSingle sample; ~33% lower
DELETE130,331 ops/s145,691 ops/sDo not claim faster from one sample
Hot-only PK lookup3,851 ops/s4,076 ops/s≈ same (pre-flush full heap)
Hot+cold PK lookup3,997 ops/s1,055 ops/s~74% slower vs full-heap baseline
Cold-only PK lookup4,032 ops/s662 ops/s~84% slower vs full-heap baseline

Async insert mirror catch-up was ~32.7k ops/s in this run. Cold-path lookups compare Parquet merge against a full-heap PostgreSQL baseline.

How to run the benchmark yourself

The harness is scripts/run-storage-comparison.sh in the koldstore repository . It needs a local pgrx PostgreSQL (lab default pg16) and cargo-nextest.

Pick a row count with --rows:

BASH
# Clone and enter the repo (source lives on GitHub)git clone https://github.com/kalamdb/koldstore.gitcd koldstore # Smoke (≈ minutes)scripts/run-storage-comparison.sh --all-sides \  --rows 100000 --hot-limit 10000 --dml-sample 1000 # Mediumscripts/run-storage-comparison.sh --all-sides \  --rows 1000000 --hot-limit 50000 --dml-sample 10000 # Published RESULTS scale (long)scripts/run-storage-comparison.sh --all-sides --repetitions 1 \  --rows 10000000 --hot-limit 100000 --dml-sample 50000
FlagMeaningDefault
--rows NTimed seed row count100000
--hot-limit NRows kept hot after flush10000
--dml-sample NUPDATE/DELETE sample size1000
--all-sidesMeasure pg then async (isolated)required with --side alternative
--side pg|asyncOne column only
--update-resultsWrite docs/benchmarks/RESULTS.md
--pg-version Npgrx major16

Each side wipes ~/.pgrx/data-<ver> and re-initdbs so leftover WAL cannot skew insert timing. Methodology detail: docs/benchmarks/README.md  in the repo.

How to read the numbers

  • Lead with storage + VACUUM when explaining the product
  • Do not market INSERT as faster than vanilla PostgreSQL
  • Expect cold PK latency until cold lookup work lands on the roadmap
  • Results vary by schema, hardware, storage backend, and workload
Last updated on