N
Neon7mo ago
wise-white

Production Server down for hours: Too many connections attempts

Server has been down for hours this morning We tried increasing the limit from 3-4 instance to 8-8 and still no avail. There was NO way for me to completely shut down the database connections and restart like traditional database services would so I was stuck. I had to clone the database into a new branch and put a temporary fix on it but we need to resolve this asap. We use connection pooling with prisma + nextJS and host on vercel.
Error occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(PostgresError { code: \"XX000\", message: \"Too many connections attempts\", severity: \"ERROR\", detail: None, column: None, hint: None }), transient: false }
Error occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(PostgresError { code: \"XX000\", message: \"Too many connections attempts\", severity: \"ERROR\", detail: None, column: None, hint: None }), transient: false }
No description
2 Replies
wise-white
wise-whiteOP7mo ago
The image above is the problematic instance. I thought the connection limit was at 10000 for pooling but somehow its only tapping out at the non-connection pooling limit. It has died down for now, but our connections count was at 0 from the chart (assuming analytics couldnt even pull data from our database) I need to ensure this doesnt happen again, would like your support so i don't have to make more child branches and keep doing temporary fixes this is how we instantiate and use prisma client
import { env } from "@/env";
import { Pool, PoolConfig, neonConfig } from "@neondatabase/serverless";
import { PrismaNeon } from "@prisma/adapter-neon";
import { PrismaClient } from "@prisma/client";
import { withOptimize } from "@prisma/extension-optimize";
import ws from "ws";

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

let _prisma: PrismaClient;

if (env.NODE_ENV === "production" && !env.CI) {
// setup
neonConfig.webSocketConstructor = ws;
const connectionString = env.DATABASE_URL;
const poolConfig: PoolConfig = { connectionString };

// instantiate
const pool = new Pool(poolConfig);
const adapter = new PrismaNeon(pool);
_prisma = new PrismaClient({ adapter });
} else {
// @ts-expect-error - this is a valid extension
_prisma = new PrismaClient().$extends(
withOptimize({
apiKey: env.OPTIMIZE_API_KEY ?? "",
enable: Boolean(env.NODE_ENV === "development" && env.OPTIMIZE_API_KEY)
})
);
globalForPrisma.prisma = _prisma;
}

export const prisma = globalForPrisma.prisma || _prisma;
import { env } from "@/env";
import { Pool, PoolConfig, neonConfig } from "@neondatabase/serverless";
import { PrismaNeon } from "@prisma/adapter-neon";
import { PrismaClient } from "@prisma/client";
import { withOptimize } from "@prisma/extension-optimize";
import ws from "ws";

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

let _prisma: PrismaClient;

if (env.NODE_ENV === "production" && !env.CI) {
// setup
neonConfig.webSocketConstructor = ws;
const connectionString = env.DATABASE_URL;
const poolConfig: PoolConfig = { connectionString };

// instantiate
const pool = new Pool(poolConfig);
const adapter = new PrismaNeon(pool);
_prisma = new PrismaClient({ adapter });
} else {
// @ts-expect-error - this is a valid extension
_prisma = new PrismaClient().$extends(
withOptimize({
apiKey: env.OPTIMIZE_API_KEY ?? "",
enable: Boolean(env.NODE_ENV === "development" && env.OPTIMIZE_API_KEY)
})
);
globalForPrisma.prisma = _prisma;
}

export const prisma = globalForPrisma.prisma || _prisma;
and package.json versions
"@neondatabase/serverless": "^0.10.4",
"@prisma/adapter-neon": "^6.4.1",
"@prisma/client": "^6.4.1",
"@prisma/extension-optimize": "^1.1.8",
"@prisma/instrumentation": "^6.4.1",
"@neondatabase/serverless": "^0.10.4",
"@prisma/adapter-neon": "^6.4.1",
"@prisma/client": "^6.4.1",
"@prisma/extension-optimize": "^1.1.8",
"@prisma/instrumentation": "^6.4.1",
and the db query string we are using
postgres://[redacted]:[redacted]-pooler.eastus2.azure.neon.tech/neondb?sslmode=require
postgres://[redacted]:[redacted]-pooler.eastus2.azure.neon.tech/neondb?sslmode=require
extended-salmon
extended-salmon6mo ago
Hi, In addition to creating a thread here, I can strongly recommend getting in touch with Support if you have not done so already. Assuming you're on paid plan of course. https://console.neon.tech/app/projects?modal=support

Did you find this page helpful?