Benchmarking · method over rankings

Measure the contract you need.

A common database does not create a common benchmark. This repository provides adapters and workload tooling; this site publishes no old point-in-time leaderboards.

No current comparative results are asserted here.

No new benchmark run was performed for this guide. Documentation claims are not measurements. The repository is maintained by Awa’s author; validate a candidate with your own workload and inspect the adapter.

01

Start with steady state.

Choose handler work, payload, offered load, pool budget and concurrency. Warm up before sampling; measure completion rate and end-to-end latency together with backlog.

02

Push past equilibrium.

Overload the producer, then reduce the load. Observe queue growth, recovery and whether retries consume capacity intended for useful work.

03

Make PostgreSQL uncomfortable.

Hold an old snapshot, introduce long transactions and watch vacuum, WAL and lock waits. A short clean-throughput cell misses those costs.

04

Break the process.

Kill a worker, interrupt a database connection, and restart PostgreSQL in a controlled environment. Account for work and external effects, rather than only observing a returning rate.

Adapters already in this repository

Presence is coverage, not an endorsement or a guarantee that the adapter pin equals the current documentation snapshot.

Six profiles are documentation-only.

PotatoQ, Graphile Worker, GoodJob, Que, Solid Queue and original PgQ are not presented as measured adapters. Adding them requires a version-pinned adapter and a comparable, fully specified run.

Keep the environment together.

Record the database/image, host allocation, system and SDK commits, batch sizes, connections, workload and test duration. Do not combine different environments or per-system best cases into one ranking.

Account for the contract.

A per-job completion, visibility-timeout acknowledgement and whole-batch event acknowledgement have different costs. Workflow checkpointing adds another boundary. Test the mechanism you will deploy.

Keep gaps visible.

Missing samples stay missing. Repeat runs, preserve failures, distinguish metric sampling from independent trials, and audit reconnect/shutdown behavior before attributing an adapter result to the entire product.