About Portfolio Services Blog Contact 🎙 Talk to AI
EN DE RU
🎙 Talk to AI
July 1, 2026 · 3 min read

Why Your AI Agents Are Slow: Optimizing Performance and Memory with ECC

I’m Denis Shokhirev, an Enterprise AI architect in Erlangen, Germany. At DennisCraft AI Studio, I deploy AI systems for DACH B2B clients in regulated industries, using a stack with Claude, Supabase, n8n, Doppler, and self-hosted Postgres. In the last six months, I shipped 14 production AI agents—and in every third deployment, agent latency was caused not by the model or API, but by how Execution Context & Control (ECC) was architected. This article is for anyone tired of seeing “slow” agents bla

Denis Shokhirev
Denis Shokhirev
Enterprise AI Architect
Telegram LinkedIn

I’m Denis Shokhirev, an Enterprise AI architect in Erlangen, Germany. At DennisCraft AI Studio, I deploy AI systems for DACH B2B clients in regulated industries, using a stack with Claude, Supabase, n8n, Doppler, and self-hosted Postgres. In the last six months, I shipped 14 production AI agents—and in every third deployment, agent latency was caused not by the model or API, but by how Execution Context & Control (ECC) was architected. This article is for anyone tired of seeing “slow” agents blamed on LLMs when the root cause is elsewhere.

Where Slowness Hides: ECC, Not the LLM

Most “agent is slow” complaints come from the ECC layer: how context is initialized, how memory is managed, and how function chains are orchestrated. In one project using Supabase + self-hosted Postgres, I traced latency spikes of 2–3 seconds per agent step to inefficient memory access patterns and unnecessary context reinitialization. None of this was due to slow inference—it was all architecture.

Common ECC Bottlenecks:

  • Re-initializing agent context on every request, instead of reusing a shared context.
  • Heavy ORM use rather than direct async SQL for memory operations.
  • No caching for memory lookups or intermediate computation.
  • Naive external service calls (e.g., n8n workflows) without batching or queue optimization.

Memory Management: It’s About Speed and Stability

Agent memory is not just about storing chat history or RAG chunks. It’s about the speed of access, data isolation, and predictability under load. On one client’s stack, agent memory in Postgres ballooned to 700K rows in a week due to missing TTL and lack of indexing. SELECT queries slowed from 50ms to 1.7s, and the client blamed “heavy traffic”—but the real culprit was unchecked memory growth.

ProblemSymptomWhat Works
Memory table bloat1–2s SELECT latencyTTL, indexes on session_id, regular VACUUM
No cache layerRedundant DB readsRedis/LRU cache on top of Postgres/Supabase
Poor data isolationRace conditions, context leaksSession-scoped ECC, row-level locks

ECC Patterns That Actually Ship

If you’re shipping agents for regulated DACH markets (DSGVO, ISO 27001), every microservice and agent instance must survive production load. Here’s what I use in live deployments:

1. Context Reuse: Don’t Rebuild on Every Step


from contextvars import ContextVar

agent_context = ContextVar("agent_context")

async def get_context():
    ctx = agent_context.get(None)
    if ctx is None:
        ctx = await load_context_from_db()
        agent_context.set(ctx)
    return ctx

ContextVars keep per-request context persistent across agent steps, cutting overhead on each call.

2. Async Connection Pools for Memory


import asyncpg

pool = await asyncpg.create_pool(dsn="postgres://user:pass@db/agents")

async def get_memory(agent_id):
    async with pool.acquire() as conn:
        row = await conn.fetchrow("SELECT * FROM memory WHERE agent_id = $1", agent_id)
        return row

Asyncpg pools let you avoid blocking on DB access and handle more parallel agents with the same hardware.

3. Caching Intermediate Lookups


import aioredis

redis = await aioredis.create_redis_pool("redis://localhost")

async def get_cached_memory(key):
    value = await redis.get(key)
    if value:
        return value
    value = await heavy_db_lookup(key)
    await redis.set(key, value, expire=600)
    return value

Even a simple Redis cache can cut repeated DB reads by 80% in production, based on my DACH deployments.

Controlling Memory Growth: TTL, Indexes, and Deduplication

Unchecked growth in agent memory tables can kill performance and reliability. In a recent deployment, missing TTLs and duplicate records led to 3s query times and connection pool exhaustion. Regular cleanup and indexing are non-negotiable for production reliability.


CREATE INDEX idx_session ON memory(session_id);
DELETE FROM memory WHERE created_at < NOW() - INTERVAL '7 days';
VACUUM FULL memory;

Set up weekly VACUUM and automated cleanup jobs for any table that stores agent history or RAG context.

Scaling ECC: When to Split Services

Once you hit 10+ concurrent agents, split ECC components (context, memory, task queue) into dedicated microservices with narrow APIs. This isolates failures and keeps agent response times predictable. In my experience, monolithic ECCs stall under load, while microservices let you scale agent fleets without rewriting the stack.

PatternProsCons
Monolithic ECCSimple deploymentPoor scaling, data races
Microservice ECCIsolation, fast responseMore ops complexity

FAQ

Why are my agents slow if the LLM is fast?

The ECC stack—context, memory, orchestration—is likely the bottleneck, not the model itself.

How do I pinpoint ECC issues?

Profile agent step latency. If there’s a big gap between LLM completion and the next step, check context/memory/code orchestration.

Which cache pattern is best?

Redis with per-session TTL and key-based invalidation is enough for most DACH deployments. For larger loads, consider sharded Redis or Memcached.

How do I keep agent memory tables from growing uncontrollably?

Apply TTL (time-to-live), deduplicate on insert, and enforce weekly cleanup. Index fields used in lookups.

Which ECC stack is most stable?

Supabase/Postgres + asyncpg + aioredis is stable for 10–50 agents in DACH production, based on my deployments.

Where do you see the most latency in your live agent pipelines: memory, context, or task orchestration? I run a free 30-min stack review for DACH founders building AI in regulated markets. DM me on LinkedIn or @ger_dennis_ai.

Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles