pg-workload 0.5.0__tar.gz → 0.6.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pg_workload-0.5.0/src/pg_workload.egg-info → pg_workload-0.6.2}/PKG-INFO +10 -2
- {pg_workload-0.5.0 → pg_workload-0.6.2}/README.md +9 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/THIRD_PARTY_NOTICES.md +29 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/pyproject.toml +1 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/__init__.py +1 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/assets.py +3 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/README.md +11 -2
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/generator.py +353 -147
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/initialization-constraints.json +86 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/initialization-indexes.json +250 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/profile.yml +0 -4
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/imdb-schema.sql +52 -53
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/sql/initialization-finalize.sql +1 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/README.md +53 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/generator.py +291 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/initialization-constraints.json +351 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/initialization-indexes.json +262 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pagila/profile.yml +10 -5
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/01_select.sql +109 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/02_insert.sql +191 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/03_update.sql +108 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/04_delete.sql +17 -0
- pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/initialization-finalize.sql +18 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pagila/sql/pagila-schema.sql +85 -774
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/01_workload.sql +1 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/cli.py +16 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/control.py +28 -1
- pg_workload-0.6.2/src/pg_workload/initialization.py +148 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/orchestration.py +3 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2/src/pg_workload.egg-info}/PKG-INFO +10 -2
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/SOURCES.txt +9 -1
- {pg_workload-0.5.0 → pg_workload-0.6.2}/tests/test_docker_postgres18.py +160 -4
- pg_workload-0.6.2/tests/test_initialization.py +112 -0
- pg_workload-0.6.2/tests/test_scheduler_identity.py +57 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/tests/test_workload.py +52 -8
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/imdb/sql/imdb-fkindexes.sql +0 -67
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/README.md +0 -32
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/generator.py +0 -193
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/01_select.sql +0 -264
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/02_insert.sql +0 -273
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/03_update.sql +0 -149
- pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/04_delete.sql +0 -27
- {pg_workload-0.5.0 → pg_workload-0.6.2}/LICENSE +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/MANIFEST.in +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/setup.cfg +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/__main__.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/sql/01_churn.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/sql/accounts-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/sql/01_workload.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/sql/schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/01_company_catalog.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/02_people_by_keyword.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/03_keyword_trends.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/04_genre_cast.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/05_join_stress.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_1.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_10.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_11.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_12.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_13.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_14.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_15.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_16.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_17.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_18.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_19.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_2.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_20.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_21.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_22.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_23.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_24.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_25.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_26.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_27.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_28.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_29.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_3.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_30.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_31.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_32.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_33.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_4.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_5.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_6.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_7.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_8.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_9.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/01_write.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/02_read.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/docs-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/01_workload.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/prepare_schema_01.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/prepare_schema_02.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/01_ingest.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/02_read_recent.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/03_read_history.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/events-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/sql/01_workload.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/sql/pss_overflow-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/01_enqueue.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/02_dequeue.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/03_settle.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/queue-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/01_workload.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/indexes.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/stock-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/README.md +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/generator.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/profile.yml +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/indexes.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/stock-schema.sql +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/schema/pg_workload-v1.schema.json +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/common.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/config.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/logging.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/pg_client.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/profiles.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/resources.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/runner.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/scheduler.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/state.py +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/dependency_links.txt +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/entry_points.txt +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/requires.txt +0 -0
- {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pg-workload
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: PostgreSQL workload emulator for diagnostic and observability testing
|
|
5
5
|
Author-email: O2eg <oleg.ispu@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -229,7 +229,7 @@ Use `--bin-dir /path/to/postgresql/bin` when client binaries are outside
|
|
|
229
229
|
| `simple_stock` | Write-heavy CRUD over related stock tables | synthetic Python generator |
|
|
230
230
|
| `simple_stock_spec_symbols` | Identifier, Unicode, and parser edge cases | synthetic Python generator |
|
|
231
231
|
| `imdb` | Movie-domain analytical joins and skew | synthetic Python generator |
|
|
232
|
-
| `pagila` |
|
|
232
|
+
| `pagila` | Pagila OLTP with a 50/25/20/5 script mix | synthetic Python generator |
|
|
233
233
|
| `many_objects` | Metadata-heavy schemas and partitions | scale-aware SQL object creation |
|
|
234
234
|
| `emulate_errors` | Intentional SQL errors | SQL seed rows only |
|
|
235
235
|
| `pss_overflow` | `pg_stat_statements` churn | scaled Python generator; extension/preload required |
|
|
@@ -384,6 +384,14 @@ to `psql`, so generated rows never pass through repository files. Because a loca
|
|
|
384
384
|
generator can execute arbitrary code with the runner account, only run profiles from a trusted
|
|
385
385
|
project directory.
|
|
386
386
|
|
|
387
|
+
`pagila` and `imdb` use the generators and SQL from `pg_perf_bench` v0.6.1, adapted for
|
|
388
|
+
scheduled workloads. Their local `pg_workload.initialization` loader commits bounded data
|
|
389
|
+
batches (100,000 rows by default), then creates indexes and constraints and analyzes every
|
|
390
|
+
table. It uses the selected `psql` and keeps normal durability settings. These two generators
|
|
391
|
+
also accept `--batch-rows N` when called directly; changing batch size preserves generated
|
|
392
|
+
values (apart from wall-clock `last_update` timestamps). Failed initialization stops the
|
|
393
|
+
command; reinstall the profile to recreate its schema and retry.
|
|
394
|
+
|
|
387
395
|
## Desired-state scheduler
|
|
388
396
|
|
|
389
397
|
The scheduler runs in the foreground and owns only its child workload processes. It does not
|
|
@@ -190,7 +190,7 @@ Use `--bin-dir /path/to/postgresql/bin` when client binaries are outside
|
|
|
190
190
|
| `simple_stock` | Write-heavy CRUD over related stock tables | synthetic Python generator |
|
|
191
191
|
| `simple_stock_spec_symbols` | Identifier, Unicode, and parser edge cases | synthetic Python generator |
|
|
192
192
|
| `imdb` | Movie-domain analytical joins and skew | synthetic Python generator |
|
|
193
|
-
| `pagila` |
|
|
193
|
+
| `pagila` | Pagila OLTP with a 50/25/20/5 script mix | synthetic Python generator |
|
|
194
194
|
| `many_objects` | Metadata-heavy schemas and partitions | scale-aware SQL object creation |
|
|
195
195
|
| `emulate_errors` | Intentional SQL errors | SQL seed rows only |
|
|
196
196
|
| `pss_overflow` | `pg_stat_statements` churn | scaled Python generator; extension/preload required |
|
|
@@ -345,6 +345,14 @@ to `psql`, so generated rows never pass through repository files. Because a loca
|
|
|
345
345
|
generator can execute arbitrary code with the runner account, only run profiles from a trusted
|
|
346
346
|
project directory.
|
|
347
347
|
|
|
348
|
+
`pagila` and `imdb` use the generators and SQL from `pg_perf_bench` v0.6.1, adapted for
|
|
349
|
+
scheduled workloads. Their local `pg_workload.initialization` loader commits bounded data
|
|
350
|
+
batches (100,000 rows by default), then creates indexes and constraints and analyzes every
|
|
351
|
+
table. It uses the selected `psql` and keeps normal durability settings. These two generators
|
|
352
|
+
also accept `--batch-rows N` when called directly; changing batch size preserves generated
|
|
353
|
+
values (apart from wall-clock `last_update` timestamps). Failed initialization stops the
|
|
354
|
+
command; reinstall the profile to recreate its schema and retry.
|
|
355
|
+
|
|
348
356
|
## Desired-state scheduler
|
|
349
357
|
|
|
350
358
|
The scheduler runs in the foreground and owns only its child workload processes. It does not
|
|
@@ -33,3 +33,32 @@ The bundled `imdb` profile includes SQL query shapes migrated and adapted from
|
|
|
33
33
|
the predecessor `pg_workload_generator` implementation. Its data generator is
|
|
34
34
|
local and deterministic. No source IMDB dataset, CSV archive, or downloaded row
|
|
35
35
|
data is included in the source distribution or wheel.
|
|
36
|
+
|
|
37
|
+
## pg_perf_bench profile sources
|
|
38
|
+
|
|
39
|
+
The Pagila and IMDb schemas, load plans, index/constraint definitions and workload SQL
|
|
40
|
+
are adapted from `pg_perf_bench` v0.6.1, commit
|
|
41
|
+
`5eec23ce4c0edf3001bdbdb70339406221a3c903`, <https://github.com/O2eg/pg_perf_bench>.
|
|
42
|
+
The psql loader and scheduled-run adaptations are maintained in pg_workload.
|
|
43
|
+
|
|
44
|
+
MIT License
|
|
45
|
+
|
|
46
|
+
Copyright (c) 2023 Tantor Labs
|
|
47
|
+
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
49
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
50
|
+
in the Software without restriction, including without limitation the rights
|
|
51
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
52
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
53
|
+
furnished to do so, subject to the following conditions:
|
|
54
|
+
|
|
55
|
+
The above copyright notice and this permission notice shall be included in all
|
|
56
|
+
copies or substantial portions of the Software.
|
|
57
|
+
|
|
58
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
59
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
60
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
61
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
62
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
63
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
64
|
+
SOFTWARE.
|
|
@@ -50,6 +50,9 @@ def _copy_tree(source_root: Path, destination_root: Path, *, force: bool) -> dic
|
|
|
50
50
|
destination_root.mkdir(parents=True, exist_ok=True)
|
|
51
51
|
for source in sorted(source_root.rglob("*")):
|
|
52
52
|
relative = source.relative_to(source_root)
|
|
53
|
+
# Bytecode caches are interpreter by-products of the installation, not assets.
|
|
54
|
+
if "__pycache__" in relative.parts:
|
|
55
|
+
continue
|
|
53
56
|
destination = destination_root / relative
|
|
54
57
|
if source.is_symlink():
|
|
55
58
|
raise WorkloadError(f"Bundled asset must not be a symlink: {source}")
|
|
@@ -6,6 +6,10 @@ It is a workload generator rather than a benchmark: the goal is to keep PostgreS
|
|
|
6
6
|
produce varied plans and statistics for `auto_explain`, `pg_stat_statements`, and DBA tooling.
|
|
7
7
|
No IMDB source rows, CSV files, archives, or network downloads are required.
|
|
8
8
|
|
|
9
|
+
The schema, generator and all 38 SQL scripts come from `pg_perf_bench` v0.6.1
|
|
10
|
+
(commit `5eec23ce4c0edf3001bdbdb70339406221a3c903`), with a local psql loader.
|
|
11
|
+
The workload queries are unchanged.
|
|
12
|
+
|
|
9
13
|
## Objects (at scale 1)
|
|
10
14
|
|
|
11
15
|
- The full 21-table relational shape used by the earlier profile, including alternate names and
|
|
@@ -15,8 +19,13 @@ No IMDB source rows, CSV files, archives, or network downloads are required.
|
|
|
15
19
|
2 million fact, relationship, and attribute rows.
|
|
16
20
|
- Deterministic synthetic anchor rows cover the names, years, countries, notes, roles, keywords,
|
|
17
21
|
genres, ratings, and link types selected by every bundled query family.
|
|
18
|
-
-
|
|
19
|
-
|
|
22
|
+
- Independent deterministic hash streams choose participants, companies, keywords and
|
|
23
|
+
attribute types/values, avoiding cyclic correlations between a film and its relationships.
|
|
24
|
+
- Identifiers are bigint. The local loader recreates the schema and commits bounded data
|
|
25
|
+
batches, then builds primary keys, join/filter indexes and constraints and runs `ANALYZE`
|
|
26
|
+
on all 21 tables. It preserves normal logging and server durability settings.
|
|
27
|
+
- The generator accepts `--batch-rows` (default 100,000); batch size does not change the data.
|
|
28
|
+
After a loading failure, reinstall the profile to recreate its schema and retry.
|
|
20
29
|
|
|
21
30
|
## Jobs
|
|
22
31
|
|