Agent Skill: Advanced pgbench Workload Execution
[!NOTE] Companion specification to Evolving
pgbenchinto a Universal Database Benchmark Engine.
- 1. Mandatory Legal & Trademark Guardrails
- 2. Invariant Execution Pipeline
- 3. Canonical Workload Invocations
- 4. Operational Invariants & Rules
You are an expert database performance agent. Use this concise reference to run pgbench benchmark suites located in workloads/.
1. Mandatory Legal & Trademark Guardrails
- DO NOT use official trademarked prefixes (
TPC-C,CH-benCHmark,LDBC,VecBench) in standalone benchmark names. - DO NOT report trademarked council metrics (
tpmC,QphH,LDBC Benchmark Results). - DO use project-scoped names:
pgbench-b,pgbench-c,pgbench-e,pgbench-h,pgbench-ds,pgbench-htap,pgbench-graph,pgbench-vec. - DO use generic metrics:
TPS,QPM,orders/sec,Recall@K,Degradation %,Validation Pass %. - DISCLAIMER: Always include in user summaries: “Results represent un-audited internal engineering measurements and do not constitute official certified benchmark results.”
2. Invariant Execution Pipeline
All suites require a 3-step initialization sequence. Never run execution scripts before completing initialization.
# 1. DDL Schema (Run once, 1 client)
pgbench -n -d $DB -t 1 -f workloads/$SUITE/${SUITE}_schema.sql
# 2. Parallel In-Database Load (Scale N, partitioned across workers)
pgbench -n -d $DB -c $W -j $W -t 1 -D scale=$SCALE -D num_workers=$W \
-f workloads/$SUITE/${SUITE}_init.sql
# 3. Secondary Indexes, FKs, & ANALYZE
pgbench -n -d $DB -t 1 -f workloads/$SUITE/${SUITE}_constraints.sql
# 3b. (MANDATORY for pgbench-vec only): Precompute Ground Truth
pgbench -n -d $DB -t 1 -f workloads/pgbench-vec/pgbench_vec_gt_gen.sql
3. Canonical Workload Invocations
A. Order-Entry OLTP (pgbench-c)
pgbench -n -d $DB -c 16 -j 4 -T 60 -D scale=4 \
-f workloads/pgbench-c/pgbench_c_new_order.sql@45 \
-f workloads/pgbench-c/pgbench_c_payment.sql@43 \
-f workloads/pgbench-c/pgbench_c_order_status.sql@4 \
-f workloads/pgbench-c/pgbench_c_delivery.sql@4 \
-f workloads/pgbench-c/pgbench_c_stock_level.sql@4 \
--sla="total:p95<=5000ms" --json-report=out_c.json
B. Mixed OLTP + OLAP (pgbench-htap)
pgbench -n -d $DB -T 60 -D scale=4 \
--group="name=oltp,clients=8,threads=4,file=workloads/pgbench-htap/pgbench_htap_oltp.sql" \
--group="name=olap,clients=2,threads=2,file=workloads/pgbench-htap/pgbench_htap_olap_q1.sql@20,file=workloads/pgbench-htap/pgbench_htap_olap_q3.sql@20,file=workloads/pgbench-htap/pgbench_htap_olap_q5.sql@20,file=workloads/pgbench-htap/pgbench_htap_olap_q6.sql@20,file=workloads/pgbench-htap/pgbench_htap_olap_q18.sql@20" \
--sla="oltp:p95<=5000ms" --sla="olap:p95<=10000ms" --json-report=out_htap.json
C. Graph Social Network & Fraud (pgbench-graph)
pgbench -n -d $DB -T 60 -s 1 --tcr=0.1 \
--reservoir=persons:4096 --reservoir=messages:8192 \
--group="name=snb_readers,clients=4,threads=2,file=workloads/pgbench-graph/pgbench_ldbc_snb_ic.sql@30,file=workloads/pgbench-graph/pgbench_ldbc_snb_is.sql@70" \
--group="name=snb_writers,clients=2,threads=2,file=workloads/pgbench-graph/pgbench_ldbc_snb_iu.sql@75,file=workloads/pgbench-graph/pgbench_ldbc_snb_id.sql@25" \
--sla="validation_failures<=0" --json-report=out_graph.json
D. Vector Search & Aging Degradation (pgbench-vec)
# Mode 1, 2, 3, 5 Hybrid Search:
pgbench -n -d $DB -c 4 -j 2 -T 60 -D scale=1 --reservoir=vec_ids:1024 \
-f workloads/pgbench-vec/pgbench_vec_search.sql@30 \
-f workloads/pgbench-vec/pgbench_vec_filtered.sql@25 \
-f workloads/pgbench-vec/pgbench_vec_postfiltered.sql@20 \
-f workloads/pgbench-vec/pgbench_vec_multivec.sql@15 \
-f workloads/pgbench-vec/pgbench_vec_insert.sql@10 \
--sla="total:r_unfiltered:recall>=0.95" \
--sla="total:r_prefilter:recall>=0.90" \
--sla="total:r_postfilter:recall>=0.40" \
--sla="total:r_multivec:recall>=0.85" \
--sla="total:p95<=100ms" --json-report=out_vec_hybrid.json
# Mode 6 Continuous Aging and Index Degradation:
pgbench -n -d $DB -c 4 -j 2 -T 120 -D scale=1 --reservoir=vec_ids:1024 \
-f workloads/pgbench-vec/pgbench_vec_aging.sql \
--sla="total:r_aging:recall>=0.80" --sla="total:p95<=150ms" \
--json-report=out_vec_aging.json
4. Operational Invariants & Rules
- Flag Exclusions:
- Never combine
-iwith custom workloads (-f). - If
--groupis used, do not specify top-level-f,-c, or-t.
- Never combine
- Reservoirs:
- Always supply
--reservoir=<name>:<size>when running scripts using\reservoir_pushor\reservoir_pop.
- Always supply
- Exit Code 2:
- Code
2indicates an SLA contract failure, not an engine crash. Parse--json-reportundersla_verificationsto inspect which target failed.
- Code