Connection pooling

Learn how to use connection pooling with your Prisma Postgres database.

Connection pooling keeps a set of database connections open and reuses them across requests, rather than opening a new connection for every query. This reduces latency and lets your database handle more concurrent requests. This is especially important in serverless and high-traffic environments where connection limits can be exhausted quickly.

Prisma Postgres supports connection pooling through TCP connections. You can also use Prisma Accelerate for connection pooling with additional features like caching.

Connection pooling with TCP

TCP connection pooling is currently in Early Access.

To use a pooled connection, append &pooled=true to your Prisma Postgres TCP connection string:

# Direct connection (no pooling)
DATABASE_URL="postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require"

# Pooled connection
DATABASE_URL="postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require&pooled=true"

You can also enable connection pooling when generating your connection string in the Prisma Console by toggling on the pooling option.

This works with any PostgreSQL client, ORM, or database tool you already use.

Connection limits

The number of available connections depends on your plan and whether you use a pooled or direct connection:

FreeStarterProBusiness
Direct connections101050100
Pooled connections101005001000

Idle connections are closed after 60 minutes. You can compare plans on the Prisma pricing page.

With TCP connections, there are no limits on query duration, transaction duration, or response size.

When to use pooled vs. direct connections

DirectPooled
How it worksYour app connects straight to the databaseYour app connects through a managed connection pooler
Best forLocal development, background jobs, low-concurrency workloadsServerless functions, APIs, high-traffic or bursty workloads
Typical usageLong-lived connectionsShort-lived or burst connections

For most production applications, pooled connections are recommended. Use direct connections when you need a persistent connection or are working in a low-concurrency environment like local development.

Connection pooling with Accelerate

You can also connect to your Prisma Postgres database through Prisma Accelerate, which provides built-in connection pooling along with a global caching layer.

Accelerate uses a proxy-based approach and requires Prisma ORM with the Accelerate client extension:

import { PrismaClient } from "../generated/prisma/client";
import { withAccelerate } from "@prisma/extension-accelerate";

const prisma = new PrismaClient({
  accelerateUrl: process.env.DATABASE_URL,
}).$extends(withAccelerate());

Your Accelerate connection string uses the prisma+postgres:// protocol:

DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"

Configurable limits

When connected via Accelerate, connection pool size, query duration, transaction duration, and response size have default limits that you can adjust from the Settings tab in your Prisma Postgres project in the Prisma Console.

Connection pool size

FreeStarterProBusiness
Connection limit101005001000

Query timeout

FreeStarterProBusiness
Query timeoutUp to 10 secondsUp to 10 secondsUp to 20 secondsUp to 60 seconds

If your queries regularly take longer than 10 seconds, consider optimizing them. Long-running queries can indicate missing indexes or inefficient data access patterns. See the error reference for more details.

Interactive transaction timeout

FreeStarterProBusiness
Transaction timeoutUp to 15 secondsUp to 15 secondsUp to 30 secondsUp to 90 seconds

When you increase the transaction timeout in the Prisma Console, you must also set a matching timeout in your application code:

await prisma.$transaction(
  async (tx) => {
    // Your queries here
  },
  {
    timeout: 30000, // 30s — must match your Console setting
  },
);

Response size

FreeStarterProBusiness
Response sizeUp to 5 MBUp to 5 MBUp to 10 MBUp to 20 MB

See the error reference and pricing page for more information.

On this page