--- date: "2026-06-01" status: adopted topic: "connection-pool" impact: [memory, performance, stability] --- # 连接池主动释放 + Mem0 实例 LRU 缓存 ## 背景 Mem0 的 PGVector 后端在实例 `__init__` 时从连接池取一个连接,理论上在 `__del__` 时归还。 但 Python GC 时机不确定,高并发下连接迟迟不归还会迅速打满 `MEM0_POOL_SIZE`(默认 50),导致后续请求阻塞。 同时若为每个 `(user_id, agent_id)` 都新建 Mem0 实例且不回收,也会无限占用连接。 ## 决策 1. `Mem0Manager` 用 `OrderedDict` 维护最多 50 个 Mem0 实例的 LRU 缓存,超出淘汰最旧的。 2. 每次记忆操作(recall/add)后调用 `_release_connection()` 立即把连接归还连接池,不等 GC。 ## 影响 - 连接池不再被慢 GC 拖垮,高并发稳定。 - 实例数量有上界,内存可控。 ## Gotchas - 不要在操作链路里持有 Mem0 实例的连接跨多个 await,会绕过释放逻辑。 - LRU 上限(50)与 `MEM0_POOL_SIZE`(50)相关联,调整其一时需一并评估。