Agent Skillsaresbit/MateBot › prisma-connection-pool-exhaustion

prisma-connection-pool-exhaustion

GitHub

解决Serverless环境下Prisma连接池耗尽问题,提供使用PgBouncer、配置连接限制及单例模式等修复方案。

skills/claudeception/examples/prisma-connection-pool-exhaustion/SKILL.md aresbit/MateBot

Trigger Scenarios

出现P2024超时或数据库连接数超限错误 本地正常但Serverless生产环境失败 高并发下间歇性数据库超时

Install

npx skills add aresbit/MateBot --skill prisma-connection-pool-exhaustion -g -y
More Options

Non-standard path

npx skills add https://github.com/aresbit/MateBot/tree/master/skills/claudeception/examples/prisma-connection-pool-exhaustion -g -y

Use without installing

npx skills use aresbit/MateBot@prisma-connection-pool-exhaustion

指定 Agent (Claude Code)

npx skills add aresbit/MateBot --skill prisma-connection-pool-exhaustion -a claude-code -g -y

安装 repo 全部 skill

npx skills add aresbit/MateBot --all -g -y

预览 repo 内 skill

npx skills add aresbit/MateBot --list

SKILL.md

Frontmatter
{
    "date": 1708387200,
    "name": "prisma-connection-pool-exhaustion",
    "author": "Claude Code",
    "version": "1.0.0",
    "description": "Fix Prisma \"Too many connections\" and connection pool exhaustion errors in \nserverless environments (Vercel, AWS Lambda, Netlify). Use when: (1) Error \n\"P2024: Timed out fetching a new connection from the pool\", (2) PostgreSQL \n\"too many connections for role\", (3) Database works locally but fails in \nproduction serverless, (4) Intermittent database timeouts under load.\n"
}

Prisma Connection Pool Exhaustion in Serverless

Problem

Serverless functions create a new Prisma client instance on each cold start. Each instance opens multiple database connections (default: 5 per instance). With many concurrent requests, this quickly exhausts the database's connection limit (often 20-100 for managed databases).

Context / Trigger Conditions

This skill applies when you see:

  • P2024: Timed out fetching a new connection from the connection pool
  • PostgreSQL: FATAL: too many connections for role "username"
  • MySQL: Too many connections
  • Works fine locally with npm run dev but fails in production
  • Errors appear during traffic spikes, then resolve
  • Database dashboard shows connections at or near limit

Environment indicators:

  • Deploying to Vercel, AWS Lambda, Netlify Functions, or similar
  • Using Prisma with PostgreSQL, MySQL, or another connection-based database
  • Database is managed (PlanetScale, Supabase, Neon, RDS, etc.)

Solution

Step 1: Use Connection Pooling Service

The recommended solution is to use a connection pooler like PgBouncer or Prisma Accelerate, which sits between your serverless functions and the database.

For Supabase:

# .env
# Use the pooled connection string (port 6543, not 5432)
DATABASE_URL="postgresql://user:pass@db.xxx.supabase.co:6543/postgres?pgbouncer=true"

For Neon:

# .env  
DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/dbname?sslmode=require"
# Neon has built-in pooling

For Prisma Accelerate:

npx prisma generate --accelerate

Step 2: Configure Prisma Connection Limits

In your schema.prisma:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  // Limit connections per Prisma instance
  relationMode = "prisma"
}

In your connection URL or Prisma client:

// lib/prisma.ts
import { PrismaClient } from '@prisma/client'

const globalForPrisma = global as unknown as { prisma: PrismaClient }

export const prisma = globalForPrisma.prisma || new PrismaClient({
  datasources: {
    db: {
      url: process.env.DATABASE_URL + '?connection_limit=1'
    }
  }
})

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma

Step 3: Singleton Pattern (Development)

Prevent hot-reload from creating new clients:

// lib/prisma.ts
import { PrismaClient } from '@prisma/client'

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined
}

export const prisma = globalForPrisma.prisma ?? new PrismaClient()

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma

Step 4: URL Parameters

Add these to your connection string:

?connection_limit=1&pool_timeout=20&connect_timeout=10
  • connection_limit=1: One connection per serverless instance
  • pool_timeout=20: Wait up to 20s for available connection
  • connect_timeout=10: Fail fast if can't connect in 10s

Verification

After applying fixes:

  1. Deploy to production
  2. Run a load test: npx autocannon -c 100 -d 30 https://your-app.com/api/test
  3. Check database dashboard—connections should stay within limits
  4. No more P2024 errors in logs

Example

Before (error under load):

[ERROR] PrismaClientKnownRequestError:
Invalid `prisma.user.findMany()` invocation:
Timed out fetching a new connection from the connection pool.

After (with connection pooling):

# Using Supabase pooler URL
DATABASE_URL="postgresql://...@db.xxx.supabase.co:6543/postgres?pgbouncer=true&connection_limit=1"

Database connections stable at 10-15 even under heavy load.

Notes

  • Different managed databases have different pooling solutions—check your provider's docs
  • PlanetScale (MySQL) uses a different architecture and doesn't have this issue
  • connection_limit=1 is aggressive; start there and increase if you see latency
  • The singleton pattern only helps in development; in production serverless, each instance is isolated
  • If using Prisma with Next.js API routes, each route invocation may be a separate serverless function
  • Consider Prisma Accelerate for built-in caching + pooling: https://www.prisma.io/accelerate

Version History

  • 2328a17 Current 2026-08-20 10:30

Same Skill Collection

matecode/SKILL.md
skills/3d-cad-skill/SKILL.md
skills/agent-browser/SKILL.md
skills/arkts-agent-skill/SKILL.md
skills/autoresearch-skill/SKILL.md
skills/baoyu-post-to-wechat/SKILL.md
skills/blogwatcher/SKILL.md
skills/c-skill/SKILL.md
skills/chrome-cdp/SKILL.md
skills/claudeception/.claude/skills/continuous-learning/SKILL.md
skills/claudeception/examples/nextjs-server-side-error-debugging/SKILL.md
skills/claudeception/examples/typescript-circular-dependency/SKILL.md
skills/claudeception/SKILL.md
skills/clawdhub/SKILL.md
skills/coding-agent/SKILL.md
skills/docx/SKILL.md
skills/ebook/book-architect/SKILL.md
skills/ebook/book-idea-validator/SKILL.md
skills/ebook/book-ideation/SKILL.md
skills/ebook/book-market-research/SKILL.md
skills/ebook/chapter-architect/SKILL.md
skills/elf-patcher/SKILL.md
skills/excalidraw-diagram-skill/SKILL.md
skills/frontend-slides/SKILL.md
skills/gemini/SKILL.md
skills/gifgrep/SKILL.md
skills/git-wt/SKILL.md
skills/github/SKILL.md
skills/harmonyos-code-review/SKILL.md
skills/harmonyos-linux-cli-dev/SKILL.md
skills/harmonyos-skills/skills/harmonyos-game-generator/SKILL.md
skills/harmonyos-skills/skills/harmonyos-test-cases/SKILL.md
skills/harmonyos-skills/skills/harmonyos-ui-automator/SKILL.md
skills/harmonyos-skills/skills/ohos-app-build-debug/SKILL.md
skills/hm-fetch-skill/SKILL.md
skills/hm-framework-skill/SKILL.md
skills/humanizer/SKILL.md
skills/ian-gemini-web/SKILL.md
skills/kernel-dev-skill/SKILL.md
skills/kimi/docx_SKILL.md
skills/kimi/pdf_SKILL.md
skills/kimi/SKILL.md
skills/kimi/webapp-building_SKILL.md
skills/lecture-skill/SKILL.md
skills/macos-menubar-tuist-app/SKILL.md
skills/macos2linuxapp/SKILL.md
skills/matecode/SKILL.md
skills/medialibrary-ut-generator/SKILL.md
skills/mermaid-validator/SKILL.md

Metadata

Files
0
Version
2328a17
Hash
5d9610df
Indexed
2026-08-20 10:30

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-25 10:19
浙ICP备14020137号-1 $방문자$