qwen3.8-27b · default on R8

pgaibench(1) / cells/qwen3.8-27b/R8
Versionpgaibench-core 0.1.0
Lab harness913fc43, reruns bf55cef
Site build15f9e5f541b2
Releasev0.1.0 (2026-11-11)
Updated2026-11-12T00:04:11Z UTC
Lab cells263 of 264 finished

Provisional. Model qwen/qwen3.8-27b, track Router (OpenRouter, pinned provider), scenario R8: Raising a hot-standby-critical GUC on the primary first, sample 1.

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."
  }
}

-> results grid
-> results tables