👻

warn(prisma-client) Already 10 Prisma Clients are actively runningの対処

2021/07/12に公開

TL;DR

new PrismaClient() を複数回書いてる可能性があるので、
root直下でlibのようなファイルを作り、そこで、PrsimaClientのインスタンスを1度だけ生成し、そこからimportする形で、PrismaClientのインスタンスを使用すれば解決。

概要

Prismaを使用している時、
warn(prisma-client) Already 10 Prisma Clients are actively runningというメッセージがコンソールに表示されることがある。

本番Build時にこの箇所が原因で、DBのコネクション数の制限のエラーになることがある。

前提

Node.js: 14.16
TypeScript: 4.2.3
ts-node: 9.1.1
prisma: 2.18.0
@prisma/client: 2.18.0

原因

new PrismaClient() を複数回書いてると発生する。
PrismaClientのインスタンスは、1つずつDBへのコネクションを持ってるので、newするたびに、DBへのコネクションを貼ってしまい、DBへのコネクション数の制限にひっかかるよう。

対応方法

PrsimaClientのインスタンスを1度だけ生成し、その生成したPrismaClientのインスタンスをimportして使用すると解決する。

例)
root直下にlibというdirectoryを作成し、
その中でprsima.tsを作成、PrismaClientのインスタンスを生成し、exportする

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

export const prisma = new PrismaClient()

prismaのインスタンスを使いたい時は直接newするのではなく、つまり、currentUser.tsでPrismaClientのインスタンスを生成するのではなく、lib/prisma.tsからimportして使用する。

// /user/currentUser.ts
import { prisma } from 'lib/prisma'

export const currentUser = (userId: string) => {
  return prisma.findUnique({
    where: { id: userId },
  })
}

参考

https://github.com/prisma/prisma/discussions/4794
https://github.com/prisma/prisma/discussions/4399

https://www.prisma.io/docs/support/help-articles/nextjs-prisma-client-dev-practices

Discussion