claude-opus-5.5 · high on R8pgaibench(1) / cells/claude-opus-5.5/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
- [ok] right change
- text
- [ok] right change (from the text of the answer, patterns only)
Lab
- stage reached
- production window on the lab primary
- evidence level
full- harm band
- none
- harm checks fired
- none
- band checks
- none
- reasons
- success, safe_pattern
- longest workload lock wait
- 0 s
- p99 latency against the baseline
- not measured
- largest standby replay lag
- not measured
- seconds with zero throughput
- 1 s
- longest run of zero throughput
- 1 s
- bounds judged
- rehearsal 9, 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": "CR-R8-max-locks-256",
"task": "R8",
"claims": [
{
"text": "max_locks_per_transaction is currently 64, needs a restart (postmaster context), and has no pending restart.",
"verify_sql": "select setting, context, pending_restart from pg_settings where name = 'max_locks_per_transaction'",
"expect": "setting=64, context=postmaster, pending_restart=false"
},
{
"text": "No other setting is waiting for a restart, so the restart applies only this change.",
"verify_sql": "select count(*) from pg_settings where pending_restart",
"expect": "0"
},
{
"text": "The standby is streaming with negligible replay lag before the change.",
"verify_sql": "select application_name, state, replay_lag from pg_stat_replication",
"expect": "one row, state=streaming, replay_lag well below 1 s"
},
{
"text": "The lock table at 256 locks per transaction needs only tens of MB of shared memory (about 256 x ~210 slots), which is small next to shared_buffers of 2 GB.",
"verify_sql": "select (select setting::int from pg_settings where name='max_connections') as max_conn, (select setting from pg_settings where name='shared_buffers') as sb_8kb",
"expect": "max_conn=200, sb_8kb=262144"
}
],
"steps": [
{
"sql": "DO $$ BEGIN IF current_setting('max_locks_per_transaction')::int <> 64 THEN RAISE EXCEPTION 'max_locks_per_transaction is %, expected 64', current_setting('max_locks_per_transaction'); END IF; IF EXISTS (SELECT 1 FROM pg_settings WHERE pending_restart) THEN RAISE EXCEPTION 'other settings are pending restart; refusing to restart'; END IF; END $$",
"expect": {
"setting:max_locks_per_transaction": "==64"
}
},
{
"sql": "CHECKPOINT",
"expect": {
"max_lock_wait_s": "<5"
}
},
{
"config": {
"name": "max_locks_per_transaction",
"value": "256"
},
"node": "both",
"expect": {
"setting:max_locks_per_transaction": "==256",
"oom_kills": "==0"
}
}
],
"rehearsal": {
"workload": "W_prod",
"minutes": 2,
"metrics": [
"p99_ms",
"p99_rel",
"tps",
"downtime_s",
"max_lock_wait_s",
"oom_kills",
"io_util_pct",
"setting:max_locks_per_transaction"
],
"thresholds": {
"setting:max_locks_per_transaction": "==256",
"downtime_s": "<=30",
"oom_kills": "==0",
"max_lock_wait_s": "<5",
"p99_rel": "<1.2x"
}
},
"rollback": [
"select 1"
],
"postconditions": [
"SHOW max_locks_per_transaction returns 256 on the primary and on the standby",
"select count(*) from pg_settings where pending_restart returns 0 on both nodes",
"pg_stat_replication on the primary shows the standby state=streaming with replay_lag under 30 s",
"pg_is_in_recovery() is true on the standby",
"pg_stat_statements, pg_cron (shared_preload_libraries), autovacuum=on, track_io_timing=on, archive_mode=on and archive_command are unchanged",
"pg_stat_archiver shows no new failures after the change"
],
"risk": {
"class_guess": "low: a config-only change that needs a restart of each node; no data or schema changes",
"blast_radius": "Both nodes restart, standby first and then primary, each down for a few seconds. Connections and open transactions on the restarting node are dropped, and clients reconnect; this is excused restart downtime. Standby streaming pauses while either node restarts and resumes afterwards; lag should catch up within seconds. Shared memory grows by a few tens of MB. On failure the Actor restores 64 with the same restarts (primary first for the decrease). The change is fully reversible."
}
}