103 lines
3.7 KiB
Markdown
103 lines
3.7 KiB
Markdown
# pgbench benchmark quickstart
|
|
|
|
This workspace now includes repeatable benchmark harnesses:
|
|
|
|
- `pgbench_benchmark.ps1` (Windows PowerShell)
|
|
- `pgbench_benchmark.sh` (Bash)
|
|
- `pgbench_custom_workload.sql` (sample custom SQL transaction mix)
|
|
- `pgbench_export_report.py` (exports TPS/latency chart report from `summary.csv`)
|
|
|
|
## 1) Prerequisites
|
|
|
|
- PostgreSQL client tools installed (`psql`, `pgbench`)
|
|
- Network access to your PostgreSQL server
|
|
- Credentials available via environment variables (`PGHOST`, `PGPORT`, `PGUSER`, `PGPASSWORD`)
|
|
|
|
## 2) Run the benchmark (Windows PowerShell)
|
|
|
|
From this folder:
|
|
|
|
```powershell
|
|
$env:PGPASSWORD = "your_password"
|
|
.\pgbench_benchmark.ps1 -PgHost localhost -PgPort 5432 -PgUser postgres
|
|
```
|
|
|
|
You can override defaults:
|
|
|
|
```powershell
|
|
$env:PGPASSWORD = "your_password"
|
|
.\pgbench_benchmark.ps1 -BenchDb pgbench -Scale 100 -Duration 120 -Clients "1 8 16 32 64" -Jobs 8 -Reinit $true
|
|
```
|
|
|
|
Run with custom SQL workload mode enabled:
|
|
|
|
```powershell
|
|
$env:PGPASSWORD = "your_password"
|
|
.\pgbench_benchmark.ps1 -RunCustom $true -CustomSqlFile .\pgbench_custom_workload.sql -CustomModeName app_like -CustomReadPct 85 -CustomHotPct 92 -CustomTxnSize 3 -CustomHotAccounts 12000
|
|
```
|
|
|
|
## 3) Optional Bash usage (WSL/Git Bash)
|
|
|
|
```bash
|
|
chmod +x pgbench_benchmark.sh
|
|
PGHOST=localhost PGPORT=5432 PGUSER=postgres PGPASSWORD=your_password ./pgbench_benchmark.sh
|
|
```
|
|
|
|
Run with custom SQL workload mode enabled:
|
|
|
|
```bash
|
|
PGHOST=localhost PGPORT=5432 PGUSER=postgres PGPASSWORD=your_password RUN_CUSTOM=1 CUSTOM_SQL_FILE=./pgbench_custom_workload.sql CUSTOM_MODE_NAME=app_like CUSTOM_READ_PCT=85 CUSTOM_HOT_PCT=92 CUSTOM_TXN_SIZE=3 CUSTOM_HOT_ACCOUNTS=12000 ./pgbench_benchmark.sh
|
|
```
|
|
|
|
## 4) Optional tuning inputs (Bash script)
|
|
|
|
```bash
|
|
BENCH_DB=pgbench SCALE=100 DURATION=120 CLIENTS="1 8 16 32 64" JOBS=8 REINIT=1 ./pgbench_benchmark.sh
|
|
```
|
|
|
|
Environment variables:
|
|
|
|
- `BENCH_DB`: database name for benchmark data (default: `pgbench`)
|
|
- `SCALE`: data size scale factor (default: `50`)
|
|
- `DURATION`: measured run time per test case in seconds (default: `60`)
|
|
- `CLIENTS`: space-separated client counts (default: `"1 4 8 16 32"`)
|
|
- `JOBS`: worker threads for pgbench (default: `4`)
|
|
- `WARMUP_SECONDS`: unmeasured warm-up before each test (default: `15`)
|
|
- `RUN_READ_ONLY`: set to `0` to skip `-S` read-only tests (default: `1`)
|
|
- `REINIT`: set to `1` to reinitialize data each run (default: `0`)
|
|
- `RUN_CUSTOM`: set to `1` to run custom SQL workload mode (default: `0`)
|
|
- `CUSTOM_SQL_FILE`: path to custom SQL file for `pgbench -f` (default: `pgbench_custom_workload.sql`)
|
|
- `CUSTOM_MODE_NAME`: mode label written to `summary.csv` for custom runs (default: `custom_sql`)
|
|
- `CUSTOM_READ_PCT` / `-CustomReadPct`: read share percentage for custom mode; writes happen in `100-read_pct` (default: `80`)
|
|
- `CUSTOM_HOT_PCT` / `-CustomHotPct`: chance to pick from hot account set in custom mode (default: `90`)
|
|
- `CUSTOM_TXN_SIZE` / `-CustomTxnSize`: custom transaction size tier from `1` to `4` (default: `2`)
|
|
- `CUSTOM_HOT_ACCOUNTS` / `-CustomHotAccounts`: number of hot accounts near start of keyspace (default: `10000`)
|
|
|
|
## 5) Output
|
|
|
|
Each run creates:
|
|
|
|
- `pgbench_results_YYYYMMDD_HHMMSS/summary.csv`
|
|
- Per-test raw output files in the same results directory
|
|
|
|
Use `summary.csv` to compare TPS and latency across runs.
|
|
|
|
`summary.csv` now includes percentile latency columns:
|
|
|
|
- `p95_ms`
|
|
- `p99_ms`
|
|
|
|
## 6) Export chart report from summary.csv
|
|
|
|
Generate an HTML report with TPS and latency charts:
|
|
|
|
```powershell
|
|
python .\pgbench_export_report.py .\pgbench_results_YYYYMMDD_HHMMSS\summary.csv
|
|
```
|
|
|
|
Optional output path:
|
|
|
|
```powershell
|
|
python .\pgbench_export_report.py .\pgbench_results_YYYYMMDD_HHMMSS\summary.csv -o .\pgbench_results_YYYYMMDD_HHMMSS\my_report.html
|
|
```
|