This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
backendcritical PriorityID: pg17-vectorized-streaming-vacuum-worker-boundary

PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation

Enforces strict resource isolation and streaming I/O ring buffer boundaries for PostgreSQL 17 autovacuum workers scanning multi-terabyte heap tables. Prevents unbounded prefetching and OS page cache saturation from evicting active working sets in shared buffers during aggressive maintenance operations.

Prohibited Anti-Pattern: Global Autovacuum Ring-Buffer Bypass and Unbounded Vectorized Prefetching on Multi-TB Heaps

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation - Enforces strict resource isolation and streaming I/O ring buffer boundaries for PostgreSQL 17 autovacuum workers scanning multi-terabyte heap tables. Prevents unbounded prefetching and OS page cache saturation from evicting active working sets in shared buffers during aggressive maintenance operations.
globs: src/database/**/*.ts, src/migrations/**/*.sql, infra/postgres/**/*.conf, infra/helm/**/*.yaml
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/pg17-vectorized-streaming-vacuum-worker-boundary"
---

# PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation

> **Severity**: CRITICAL | **Category**: backend
> **Anti-Pattern Warning**: Global Autovacuum Ring-Buffer Bypass and Unbounded Vectorized Prefetching on Multi-TB Heaps

## System Constraints
You are a Principal Database Infrastructure Architect enforcing PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Boundaries. Mandate invariants that restrict streaming read concurrency, tune autovacuum cost delays, and enforce dedicated table-level storage parameters on high-throughput multi-terabyte tables to eliminate shared buffer pool churn and critical OLTP p99 latency regressions.

## Strict Guidelines
- Engineers MUST ALWAYS isolate high-volume append/update tables using per-table storage parameters (`autovacuum_vacuum_cost_limit`, `autovacuum_vacuum_cost_delay`, `vacuum_buffer_usage_limit`) instead of relying on global cluster defaults.
- Engineers MUST NOT allow PostgreSQL 17 vectorized streaming read prefetch queues (`io_combine_limit` and maintenance worker readahead) to consume more than 16MB of dedicated ring buffer space per worker during autovacuum passes on tables > 500GB.
- Code SHOULD enforce programmatic execution of maintenance vacuums via transactional advisory locks and dynamic session-level cost adjustments (`pg_advisory_xact_lock`, `SET LOCAL vacuum_cost_limit`) during identified off-peak synthetic traffic windows.
- Services MUST monitor `pg_stat_io` and `pg_stat_database` metrics, triggering alert signals if `io_context = 'vacuum'` evictions incur backend read wait latency spikes greater than 5ms at the p99 threshold.
- Components NEVER execute raw unbounded `VACUUM FULL` or manual `VACUUM FREEZE` on active partition ranges without dynamically capping `vacuum_buffer_usage_limit` to prevent full buffer pool invalidation.

## Bad vs Good Implementations
### PostgreSQL 17 Multi-TB Table Storage Parameter Tuning vs Unbounded Defaults

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: In PostgreSQL 17, unconfigured streaming read workers execute aggressive vectorized block reads that flood the kernel page cache and exhaust storage controller IOPS queues, evicting the OLTP working set from shared buffers and spiking tail latency.
```sql
-- Globally reliant table definition causing aggressive streaming prefetch and buffer evictions
CREATE TABLE order_ledger_events (
    event_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id UUID NOT NULL,
    payload JSONB NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
) PARTITION BY RANGE (created_at);

-- Anti-pattern: Running manual maintenance with unconstrained streaming I/O ring buffer
VACUUM (ANALYZE, VERBOSE) order_ledger_events;
```

#### Production Standard (Correct)
> **Standard**: Explicitly bounds autovacuum ring buffers to 16MB using PG17's `vacuum_buffer_usage_limit`, scales cost limits, and paces vectorized I/O streaming reads, preventing buffer pool pollution and protecting OLTP read cache hits.
```sql
-- Constrain PostgreSQL 17 vectorized streaming read boundaries and dedicated ring buffers
CREATE TABLE order_ledger_events (
    event_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id UUID NOT NULL,
    payload JSONB NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
) WITH (
    autovacuum_enabled = true,
    autovacuum_vacuum_cost_delay = 2,
    autovacuum_vacuum_cost_limit = 2000,
    vacuum_buffer_usage_limit = '16MB',
    autovacuum_vacuum_scale_factor = 0.05,
    autovacuum_vacuum_threshold = 10000
) PARTITION BY RANGE (created_at);

-- Controlled maintenance invocation using session-level streaming guardrails
SET LOCAL vacuum_buffer_usage_limit = '16MB';
SET LOCAL vacuum_cost_limit = 2000;
SET LOCAL vacuum_cost_delay = 2;
VACUUM (ANALYZE, BUFFER_USAGE_LIMIT '16MB') order_ledger_events;
```

### TypeScript Migration Guardrail Enforcing Storage Parameter Isolation

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Omits table storage parameters, falling back to aggressive PG17 streaming autovacuum worker limits that throttle live concurrent transactional queries under heavy write load.
```typescript
import { QueryRunner } from 'typeorm';

export async function applyPartitionMigration(queryRunner: QueryRunner): Promise<void> {
  // Anti-pattern: Creating large-scale partitions without PostgreSQL 17 vacuum streaming caps
  await queryRunner.query(`
    CREATE TABLE audit_records_2026_q1 PARTITION OF audit_records
    FOR VALUES FROM ('2026-01-01') TO ('2026-04-01');
  `);
}
```

#### Production Standard (Correct)
> **Standard**: Guarantees every created partition automatically enforces bounded vacuum ring sizes and throttled prefetch limits directly at the metadata catalog boundary.
```typescript
import { QueryRunner } from 'typeorm';

const REQUIRED_VACUUM_OPTS = [
  'autovacuum_vacuum_cost_delay = 2',
  'autovacuum_vacuum_cost_limit = 2000',
  "vacuum_buffer_usage_limit = '16MB'",
  'autovacuum_vacuum_scale_factor = 0.02'
];

export async function applyPartitionMigration(queryRunner: QueryRunner): Promise<void> {
  const storageOpts = REQUIRED_VACUUM_OPTS.join(', ');
  
  await queryRunner.query(`
    CREATE TABLE audit_records_2026_q1 PARTITION OF audit_records
    FOR VALUES FROM ('2026-01-01') TO ('2026-04-01')
    WITH (${storageOpts});
  `);
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation

PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation defines an industrial-grade behavioral standard for backend engineering. Enforces strict resource isolation and streaming I/O ring buffer boundaries for PostgreSQL 17 autovacuum workers scanning multi-terabyte heap tables. Prevents unbounded prefetching and OS page cache saturation from evicting active working sets in shared buffers during aggressive maintenance operations. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Global Autovacuum Ring-Buffer Bypass and Unbounded Vectorized Prefetching on Multi-TB Heaps Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftGlobal Autovacuum Ring-Buffer Bypass and Unbounded Vectorized Prefetching on Multi-TB HeapsCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS isolate high-volume append/update tables using per-table storage parameters (`autovacuum_vacuum_cost_limit`, `autovacuum_vacuum_cost_delay`, `vacuum_buffer_usage_limit`) instead of relying on global cluster defaults.

Engineers MUST ALWAYS isolate high-volume append/update tables using per-table storage parameters (`autovacuum_vacuum_cost_limit`, `autovacuum_vacuum_cost_delay`, `vacuum_buffer_usage_limit`) instead of relying on global cluster defaults.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT allow PostgreSQL 17 vectorized streaming read prefetch queues (`io_combine_limit` and maintenance worker readahead) to consume more than 16MB of dedicated ring buffer space per worker during autovacuum passes on tables > 500GB.

Engineers MUST NOT allow PostgreSQL 17 vectorized streaming read prefetch queues (`io_combine_limit` and maintenance worker readahead) to consume more than 16MB of dedicated ring buffer space per worker during autovacuum passes on tables > 500GB.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Code SHOULD enforce programmatic execution of maintenance vacuums via transactional advisory locks and dynamic session-level cost adjustments (`pg_advisory_xact_lock`, `SET LOCAL vacuum_cost_limit`) during identified off-peak synthetic traffic windows.

Code SHOULD enforce programmatic execution of maintenance vacuums via transactional advisory locks and dynamic session-level cost adjustments (`pg_advisory_xact_lock`, `SET LOCAL vacuum_cost_limit`) during identified off-peak synthetic traffic windows.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Services MUST monitor `pg_stat_io` and `pg_stat_database` metrics, triggering alert signals if `io_context = 'vacuum'` evictions incur backend read wait latency spikes greater than 5ms at the p99 threshold.

Services MUST monitor `pg_stat_io` and `pg_stat_database` metrics, triggering alert signals if `io_context = 'vacuum'` evictions incur backend read wait latency spikes greater than 5ms at the p99 threshold.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Components NEVER execute raw unbounded `VACUUM FULL` or manual `VACUUM FREEZE` on active partition ranges without dynamically capping `vacuum_buffer_usage_limit` to prevent full buffer pool invalidation.

Components NEVER execute raw unbounded `VACUUM FULL` or manual `VACUUM FREEZE` on active partition ranges without dynamically capping `vacuum_buffer_usage_limit` to prevent full buffer pool invalidation.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is PostgreSQL 17 Vectorized Streaming I/O Vacuum Worker Isolation critical for AI coding assistants?

Enforces strict resource isolation and streaming I/O ring buffer boundaries for PostgreSQL 17 autovacuum workers scanning multi-terabyte heap tables. Prevents unbounded prefetching and OS page cache saturation from evicting active working sets in shared buffers during aggressive maintenance operations. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Global Autovacuum Ring-Buffer Bypass and Unbounded Vectorized Prefetching on Multi-TB Heaps) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

PostgreSQL