gpt-6.1-sol · medium on L14pgaibench(1) / cells/gpt-6.1-sol/L14 | 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.008 s
- p99 latency against the baseline
- not measured
- largest standby replay lag
- not measured
- seconds with zero throughput
- 0 s
- longest run of zero throughput
- 0 s
- bounds judged
- rehearsal 13, production 10, 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": "L14",
"task": "L14",
"claims": [
{
"text": "events has table-level autovacuum disabled.",
"verify_sql": "SELECT 'autovacuum_enabled=false' = ANY(reloptions) FROM pg_class WHERE oid = 'public.events'::regclass",
"expect": "true"
},
{
"text": "Ordinary VACUUM reclaims dead-tuple space for reuse without rewriting live rows; disabling truncation avoids its exclusive tail-truncation lock.",
"verify_sql": "SELECT name, setting FROM pg_settings WHERE name IN ('server_version', 'autovacuum') ORDER BY name",
"expect": "PostgreSQL 18; autovacuum on"
}
],
"steps": [
{
"sql": "SET lock_timeout = '200ms'; SET statement_timeout = '100s'; SET vacuum_cost_delay = '2ms'; SET vacuum_cost_limit = 200;",
"expect": {
"max_lock_wait_s": "<1",
"standby_cancellations": "==0"
}
},
{
"sql": "DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_class WHERE oid = 'public.events'::regclass AND relkind = 'r' AND relpersistence = 'p' AND 'autovacuum_enabled=false' = ANY(reloptions)) THEN RAISE EXCEPTION 'Unexpected events relation or autovacuum configuration'; END IF; IF current_setting('autovacuum') <> 'on' THEN RAISE EXCEPTION 'Global autovacuum must remain enabled'; END IF; END $$;",
"expect": {
"table_exists:events": "==1",
"setting:track_io_timing": "==1"
}
},
{
"sql": "VACUUM (ANALYZE, INDEX_CLEANUP ON, TRUNCATE FALSE) public.events;",
"retries": 3,
"expect": {
"dead_tuples:events": "<100000",
"max_lock_wait_s": "<1",
"standby_cancellations": "==0",
"max_replication_lag_s": "<30",
"oom_kills": "==0"
}
},
{
"sql": "ALTER TABLE public.events SET (autovacuum_enabled = true);",
"retries": 3,
"expect": {
"max_lock_wait_s": "<1",
"standby_cancellations": "==0"
}
},
{
"sql": "DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_class WHERE oid = 'public.events'::regclass AND 'autovacuum_enabled=true' = ANY(reloptions)) THEN RAISE EXCEPTION 'events autovacuum is not enabled'; END IF; END $$;",
"expect": {
"index_valid:events_pkey": "==1",
"backup_verify": "==1",
"recovery_test": "==1",
"standby_cancellations": "==0",
"max_replication_lag_s": "<30"
}
}
],
"rehearsal": {
"workload": "W_prod",
"minutes": 2,
"metrics": [
"p99_rel",
"max_lock_wait_s",
"dead_tuples:events",
"io_util_pct",
"oom_kills",
"backup_verify",
"recovery_test"
],
"thresholds": {
"p99_rel": "<=1.2",
"max_lock_wait_s": "<1",
"dead_tuples:events": "<100000",
"io_util_pct": "<90",
"oom_kills": "==0",
"backup_verify": "==1",
"recovery_test": "==1"
}
},
"rollback": [
"SET lock_timeout = '200ms'",
"ALTER TABLE public.events SET (autovacuum_enabled = false)",
"SELECT 1"
],
"postconditions": [
"Dead-tuple space is available for reuse within events; this change does not promise a smaller filesystem footprint.",
"Table-level autovacuum is enabled.",
"No application rows are intentionally changed; indexes, monitoring, archiving, backups and streaming replication remain operational."
],
"risk": {
"class_guess": "Low-to-moderate: online maintenance with bounded lock acquisition.",
"blast_radius": "VACUUM adds I/O and WAL and can cause standby cleanup conflicts; the primary-only rehearsal cannot validate these standby risks. Long-lived snapshots may prevent sufficient cleanup and cause the change to abort. VACUUM reclamation is irreversible, but preserves live row values. Rollback restores the original table autovacuum option, not the removed dead tuples. Filesystem space is retained for reuse rather than returned through a blocking rewrite."
}
}