mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-05 20:42:54 +00:00
## Problem - We run the large tenant oltp workload with a fixed size (larger than existing customers' workloads). Our customer's workloads are continuously growing and our testing should stay ahead of the customers' production workloads. - we want to touch all tables in the tenant's database (updates) so that we simulate a continuous change in layer files like in a real production workload - our current oltp benchmark uses a mixture of read and write transactions, however we also want a separate test run with read-only transactions only ## Summary of changes - modify the existing workload to have a separate run with pgbench custom scripts that are read-only - create a new workload that - grows all large tables in each run (for the reuse branch in the large oltp tenant's project) - updates a percentage of rows in all large tables in each run (to enforce table bloat and auto-vacuum runs and layer rebuild in pageservers Each run of the new workflow increases the logical database size about 16 GB. We start with 6 runs per day which will give us about 96-100 GB growth per day. --------- Co-authored-by: Alexander Lakhin <alexander.lakhin@neon.tech>
30 lines
1.1 KiB
SQL
30 lines
1.1 KiB
SQL
-- add 100000 rows or approx. 24 MB to the values table
|
|
-- takes about 126 seconds
|
|
INSERT INTO workflows.values (
|
|
id,
|
|
type,
|
|
int_value,
|
|
string_value,
|
|
child_type,
|
|
bool_value,
|
|
uuid,
|
|
numeric_value,
|
|
workflow_id,
|
|
jsonb_value,
|
|
parent_value_id
|
|
)
|
|
SELECT
|
|
gs AS id,
|
|
'TYPE_A' AS type,
|
|
CASE WHEN selector = 1 THEN gs ELSE NULL END AS int_value,
|
|
CASE WHEN selector = 2 THEN 'string_value_' || gs::text ELSE NULL END AS string_value,
|
|
'CHILD_TYPE_A' AS child_type, -- Always non-null
|
|
CASE WHEN selector = 3 THEN (gs % 2 = 0) ELSE NULL END AS bool_value,
|
|
uuid_generate_v4() AS uuid, -- Always non-null
|
|
CASE WHEN selector = 4 THEN gs * 1.0 ELSE NULL END AS numeric_value,
|
|
(array[1, 2, 3, 4, 5])[gs % 5 + 1] AS workflow_id, -- Use only existing workflow IDs
|
|
CASE WHEN selector = 5 THEN ('{"key":' || gs::text || '}')::jsonb ELSE NULL END AS jsonb_value,
|
|
(gs % 100) + 1 AS parent_value_id -- Always non-null
|
|
FROM
|
|
generate_series(1, 100000) AS gs,
|
|
(SELECT floor(random() * 5 + 1)::int AS selector) AS s; |