Skip to main content
Version: Next

Built-in Workloads

Stroppy v6 compiles workload implementations and their assets into one binary. No workspace generation is required.

stroppy run simple
stroppy run tpcb/tx
stroppy run tpcb/procs
stroppy run tpcc/tx
stroppy run tpcc/procs
stroppy run tpch/tx
stroppy run tpcds
stroppy run ./queries.sql

Catalog​

WorkloadPurposeDrivers
simpleSmall create/load/read/drop smokeSQL drivers with row results
tpcb/txTPC-B client-side transactionPostgreSQL, MySQL, Picodata, YDB
tpcb/procsTPC-B stored procedurePostgreSQL, MySQL
tpcc/txTPC-C five-transaction mixPostgreSQL, MySQL, Picodata, YDB
tpcc/procsTPC-C stored proceduresPostgreSQL, MySQL
tpch/txTPC-H load plus q1–q22PostgreSQL, MySQL, Picodata, YDB
tpcdsTPC-DS load plus query suitePostgreSQL, MySQL, YDB; Picodata load-only
execute_sqlSQL file or inline SQLSQL query drivers

Discover exact schemas and embedded assets:

stroppy probe
stroppy probe -o json
stroppy run tpcc/tx --help

Shared executors​

All registered workloads accept:

FlagDefaultMeaning
--executorshared-iterationsshared-iterations or constant-vus.
--vus1Virtual users.
--iterations1Total shared iterations.
--duration0sConstant-VU duration.
--query-timeout0sPer-statement deadline; zero disables it.

Power/fixed-work run:

stroppy run tpcb/tx \
--executor shared-iterations --vus 4 --iterations 100

Throughput run:

stroppy run tpcc/tx \
--executor constant-vus --vus 32 --duration 5m

Two-pass load and measure​

Most database workloads run setup before their executor. Split loading from measurement when load time must not affect throughput interpretation.

# Prepare data.
stroppy run tpcc/tx -d pg --scale-factor 50 --load-workers 16 \
--no-steps workload

# Measure existing data.
stroppy run tpcc/tx -d pg --scale-factor 50 \
--executor constant-vus --vus 64 --duration 1h \
--steps workload

Step filters apply to both passes. Ensure both commands use the same database, scale, SQL variant, and workload-specific range settings.

simple​

simple demonstrates the native workload lifecycle:

  1. drop stroppy_demo;
  2. create three-column table;
  3. load 100 deterministic rows through a typed insert request;
  4. validate row count and perform lookups;
  5. drop table during teardown.
stroppy run simple -d pg

Steps: drop_schema, create_schema, load_data, workload.

The workload validates returned rows, so it is not a Noop-driver overhead test. Use stroppy baseline for Noop and wire ceilings.

tpcb/tx and tpcb/procs​

TPC-B models a banking transaction: update account, read balance, update teller and branch, then append history.

stroppy run tpcb/tx -d pg --scale-factor 10 \
--executor constant-vus --vus 32 --duration 5m

stroppy run tpcb/procs -d mysql --iterations 100

Typed workload flags:

FlagDefaultMeaning
--scale-factor1Branch count; 10 tellers and 100,000 accounts per branch.
--load-workers1Workers used for each table load.
--retry-attempts3Maximum transaction attempts.
--tx-isolationdriver-derivedIsolation override.
--sql-filedialect assetSQL override.

Default isolation: read_committed on PostgreSQL/MySQL, none on Picodata, serializable on YDB.

Setup order:

drop_schema
create_schema
create_procedures # procs only
load_data
create_indexes
create_foreign_keys
analyze
workload

See TPC-B.

tpcc/tx and tpcc/procs​

TPC-C runs the standard 45/43/4/4/4 New-Order, Payment, Order-Status, Delivery, and Stock-Level mix.

stroppy run tpcc/tx -d pg --scale-factor 10 \
--executor constant-vus --vus 32 --duration 5m

stroppy run tpcc/procs -d mysql --pacing=true --iterations 100

Typed workload flags:

FlagDefaultMeaning
--scale-factor1Warehouse count; legacy alias WAREHOUSES.
--warehouse-start1First warehouse ID for distributed loading.
--load-itemscontextualLoad global item table; defaults true only at warehouse 1.
--load-workers1Workers per table load.
--pacingfalseApply TPC-C keying and think times.
--retry-attempts3Maximum transaction attempts.
--pg-unloggedfalseOpt into PostgreSQL unlogged load.
--tx-isolationdriver-derivedIsolation override.
--sql-filedialect assetSQL override.

Default isolation: repeatable_read on PostgreSQL/MySQL, none on Picodata, serializable on YDB.

Setup order:

drop_schema
create_schema
create_procedures # procs only
set_unlogged # opt-in PostgreSQL
load_data
create_indexes
set_logged # when set_unlogged ran
create_foreign_keys
analyze
validate_population
workload

A population-validation failure is structural and exits nonzero. Both variants emit per-transaction count, mix, throughput, and p50/p90/p95/p99 summaries. Paced runs additionally report response-time/mix verdicts and steady-state assessment.

See TPC-C.

tpch/tx​

TPC-H loads eight canonical dbgen tables and executes q1–q22 with pinned parameters.

stroppy run tpch/tx -d pg --scale-factor 0.01
stroppy run tpch/tx -d pico --scale-factor 0.01

Typed workload flags:

FlagDefaultMeaning
--scale-factor1Positive fractional row scale.
--load-workers0Load workers; zero resolves to one.
--pg-unloggedfalseOpt into PostgreSQL unlogged load.
--ydb-store-modecolumncolumn or row.
--sql-filedialect assetSQL override.

Setup order:

drop_schema
create_schema
set_unlogged # opt-in PostgreSQL
load_data
create_indexes
set_logged # when set_unlogged ran
analyze
validate_answers
workload

o_totalprice is computed during canonical generation; no post-load finalize step exists. SF=1 answer comparison is PostgreSQL-only and diagnostic.

See TPC-H.

tpcds​

TPC-DS loads all 24 canonical dsdgen tables. PostgreSQL, MySQL, and YDB execute the baked query suite; Picodata supports loading only.

stroppy run tpcds -d pg --scale-factor 0.1
stroppy run tpcds -d ydb --scale-factor 0.1
stroppy run tpcds -d pico --scale-factor 0.1 --no-steps workload

Typed workload flags:

FlagDefaultMeaning
--scale-factor1Positive fractional row scale.
--load-workers0Workers per table load.
--pg-unloggedfalseOpt into PostgreSQL unlogged load.
--ydb-store-modecolumncolumn or row.
--streams1Number of generated query streams.
--query-streamunsetExplicit generated stream number.
--query-seed19620718Generated-stream seed.
--schema-filedialect assetSchema override.
--sql-filedialect assetQuery override.
--validate-forcefalseCompare SF=1 references outside SF=1.

YDB accepts only the baked query set; generated streams are rejected. Answer comparison is PostgreSQL/MySQL-only and diagnostic. Several static dimensions remain large even at fractional scale.

Setup order:

drop_schema
create_schema
set_unlogged # opt-in PostgreSQL
load_data
create_indexes
set_logged # when set_unlogged ran
analyze
validate_answers # baked PG/MySQL path
workload

See TPC-DS.

execute_sql​

A .sql first positional or inline statement selects execute_sql:

stroppy run ./queries.sql -d pg
stroppy run "select 1" -d pg

Workload-specific flags:

FlagDefaultMeaning
--sql-fileunsetSQL file path.
--sql-bodyunsetInline SQL body.

Shared executor and query-timeout flags also apply. Named queries in a flat file run in order. Nonfatal query errors are counted and the remaining query set continues.

Environment compatibility​

Uppercase environment names and -e remain supported, but direct flags are preferred:

stroppy run tpcc/tx -e warehouses=10 -e load_workers=8

Typed source precedence and config mapping are documented in Configuration Files.