まらんさんのチラ裏

その日暮らしのおじさん

Prisma2 + Promise.all() とかやるとコネクション数制限に引っかかってエラーになる件

RDB に Prisma2 を用いてクエリを投げるのはよくやると思うんですが、Promise.all() とかして物凄い勢いで非同期実行するとこんなエラーが出がち。
あと connection_limit を引き上げろって言われてるけど、GCP のコンソールでグラフを見ている限り、実際には同時クエリ実行数で怒られてるように見える。

Timed out fetching a new connection from the pool. Please consider reducing the number of requests or increasing the connection_limit parameter (https://www.prisma.io/docs/concepts/components/prisma-client/connection-management#connection-pool). Current limit: 100.

.env の DATABASE_URLpool_timeout=0 を指定してやるとずっと待ってくれるので回避できる。
とはいえ 0 だと永久に待つらしいので、普通は 30sec 程度で殺すようにしたほうがいいと思う。
あと connection_limit, socketTimeout, connectTimeout の調整も必要であればやる。

DATABASE_URL=postgresql://postgres:postgres@localhost:5432/hoge?schema=public&connection_limit=100&pool_timeout=0&socketTimeout=0&connectTimeout=0