qwen3.8-27b · default on R8pgaibench(1) / cells/qwen3.8-27b/R8 | Version | pgaibench-core 0.1.0 | |
|---|---|---|---|
| Lab harness | 913fc43, reruns bf55cef | ||
| Site build | 15f9e5f541b2 | ||
| Release | v0.1.0 (2026-11-11) | ||
| Updated | 2026-11-12T00:04:11Z UTC | ||
| Lab cells | 263 of 264 finished | ||
- lab
- [inef] ineffective (read by two readers)
- text
- [ok] right change (from the text of the answer, patterns only)
ineffective (read by two readers). Reader A: Method is right (config max_locks_per_transaction=256 node=both), but its pre-check raises IF no pg_stat_replication row is streaming: rehearsal P0001 'precheck: no streaming walsender (streaming=0)'. The model input says the clone has no standby; prereg 13 counts this stop as the change's own doing. No harm, goal missed. Not harness by the published rule, but the clone design is the trigger.
Lab
- stage reached
- rehearsal on the clone (stopped there)
- evidence level
stopped_at_rehearsal- harm band
- not measured
- harm checks fired
- none
- band checks
- none
- reasons
- guard_raised_nothing_changed
- longest workload lock wait
- not measured
- p99 latency against the baseline
- not measured
- largest standby replay lag
- not measured
- seconds with zero throughput
- not measured
- longest run of zero throughput
- not measured
- bounds judged
- rehearsal 4, production 0, never 0
"not measured" means the value does not exist for this cell (for example, the change never reached the lab primary). It is never zero.
Answer
The change request, as the model wrote it (JSON).
{
"id": "R8",
"task": "R8",
"claims": [
{
"text": "max_locks_per_transaction is 256, context postmaster, and not pending a restart (i.e. the value is live) after the change.",
"verify_sql": "select setting, context, pending_restart from pg_settings where name = 'max_locks_per_transaction'",
"expect": "setting=256, context=postmaster, pending_restart=f"
},
{
"text": "Standby remains streaming with minimal replay lag after the rolling restart (standby restarted first, then primary).",
"verify_sql": "select application_name, state, sync_state, replay_lag from pg_stat_replication",
"expect": "state=streaming, replay_lag near 0"
},
{
"text": "WAL archiving, autovacuum, pg_stat_statements and track_io_timing remain enabled after the change.",
"verify_sql": "select (select setting from pg_settings where name='archive_mode')||'/'||(select setting from pg_settings where name='autovacuum')||'/'||(select setting from pg_settings where name='track_io_timing')||'/'||(select extname from pg_extension where extname='pg_stat_statements') as health",
"expect": "on/on/on/pg_stat_statements"
}
],
"steps": [
{
"sql": "DO $$ DECLARE v_setting text; v_ctx text; v_pending boolean; v_stream int; BEGIN SELECT setting, context, pending_restart INTO v_setting, v_ctx, v_pending FROM pg_settings WHERE name = 'max_locks_per_transaction'; IF v_setting IS DISTINCT FROM '64' THEN RAISE EXCEPTION 'precheck: max_locks_per_transaction=% expected 64', v_setting; END IF; IF v_ctx IS DISTINCT FROM 'postmaster' THEN RAISE EXCEPTION 'precheck: context=% expected postmaster', v_ctx; END IF; SELECT count(*) INTO v_stream FROM pg_stat_replication WHERE state = 'streaming'; IF v_stream < 1 THEN RAISE EXCEPTION 'precheck: no streaming walsender (streaming=%)', v_stream; END IF; END $$",
"expect": {
"setting:max_locks_per_transaction": "==64"
}
},
{
"config": {
"name": "max_locks_per_transaction",
"value": "256"
},
"node": "both",
"expect": {
"setting:max_locks_per_transaction": "==256"
}
},
{
"sql": "DO $$ DECLARE v_setting text; v_ctx text; v_pending boolean; BEGIN SELECT setting, context, pending_restart INTO v_setting, v_ctx, v_pending FROM pg_settings WHERE name = 'max_locks_per_transaction'; IF v_setting IS DISTINCT FROM '256' THEN RAISE EXCEPTION 'postcheck: max_locks_per_transaction=% expected 256', v_setting; END IF; IF v_pending THEN RAISE EXCEPTION 'postcheck: pending_restart still true after restart'; END IF; END $$",
"expect": {
"setting:max_locks_per_transaction": "==256"
}
}
],
"rehearsal": {
"workload": "W_prod",
"minutes": 2,
"metrics": [
"setting:max_locks_per_transaction",
"downtime_s",
"oom_kills",
"p99_rel",
"p99_ms",
"tps",
"max_lock_wait_s",
"lockmanager_share",
"lockmanager_count",
"io_util_pct",
"server_version"
],
"thresholds": {
"setting:max_locks_per_transaction": "==256",
"downtime_s": "<=30",
"oom_kills": "==0",
"p99_rel": "<=1.2"
}
},
"rollback": [
"select 1"
],
"postconditions": [
"max_locks_per_transaction = 256 and live (pending_restart = false) on both the primary and the standby.",
"Standby is streaming; replay lag returns to baseline with no sustained lag above 30 s.",
"Primary throughput and p99 latency recover to within 1.2x normal after the restart.",
"WAL archiving, autovacuum, pg_stat_statements and track_io_timing remain enabled and functioning.",
"No rows, DDL, or data changed; only the postmaster setting changed."
],
"risk": {
"class_guess": "postmaster setting change requiring a two-node rolling restart (standby first, then primary)",
"blast_radius": "Both nodes restart inside the approved window (standby first, then primary), each under 30 s and excused. No row, DDL, or data changes; only the postmaster setting changes, and it is fully reversible (the Actor reverts it to 64 with a restart on abort, then runs the no-op rollback). Main risks are brief replication re-establishment and post-restart latency/throughput recovery, monitored via max_replication_lag_s, p99_rel and oom_kills; the enlarged lock table shared memory is validated by oom_kills==0 in rehearsal."
}
}