Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Performance

Weekly benchmark

Run 2026-09-29 at commit 5924edb441fe: 43 ClickBench queries per reader, each reader a cold DuckDB with 4 / readers threads, on a 4-core GitHub runner. Shared hardware, so read it as a trend, not a score. Full history: history.jsonl.

ReadersQueries/sp50p95Geomean
12.57149 ms1333 ms149 ms
22.7313 ms1999 ms258 ms
42.87493 ms3589 ms431 ms

Reference runs

Against an S3 gateway. Full ClickBench (100M rows), DuckDB 1.5.6, local kind. The same DuckLake read through DuckDB httpfs and a PostgreSQL-backed S3 gateway (pgvs3) was compared with pgvfs. Fresh DuckDB per query:

S3 gatewaypgvfs
Geomean430 ms371 ms (0.86×)
Warm geomean229 ms229 ms

Short queries gain most, because the HTTP hop and HEAD revalidation are gone. The heaviest string scans remain 2–7% slower. The run is from pgvs3 abcdb09, before the split. It used identical data (checked by whole-table checksum), the two stacks alternated run by run, and each figure is the median of 5. Records: docs/results/vs-s3-gateway.jsonl.

Concurrent readers (just bench --parts 20 --readers 1,2,4,8,16). 20M rows, PostgreSQL 18 and every DuckDB reader on one 16-core machine, each reader with cores / readers threads, all 43 queries per reader from a cold cache:

ReadersQueries/sp50p95geomean
15.579 ms433 ms78 ms
26.0144 ms873 ms154 ms
46.6263 ms1.8 s266 ms
86.3621 ms3.8 s520 ms
166.91.0 s6.5 s873 ms

Throughput holds as readers are added, and latency follows each reader’s CPU share. On one machine the cores are the limit, not the storage layer. Readers on separate machines scale until PostgreSQL’s I/O or CPU saturates.