Supabase边缘函数数据库连接闲置过多问题排查
Supabase边缘函数数据库连接泄漏问题
我在Supabase中使用边缘函数直接执行PostgreSQL数据库操作,每次调用边缘函数时的代码如下:
const pool = new postgres.Pool(databaseUrl, 2, true); try { await connection.queryObject<UserImageModel>( `SELECT ...` ); } finally { connection.release(); }
当约40位用户同时使用应用、频繁调用该边缘函数时,很快就遇到了remaining connection slots are reserved for non-replication superuser connections错误。我的Supabase微型项目支持60个直接数据库连接。
我原本以为边缘函数只会在调用connection.release()前短暂占用数据库连接,但执行以下查询检查开放连接时:
SELECT pg_stat_activity.pid as connection_id, ssl, datname as database, usename as connected_role, application_name, client_addr as IP, query, query_start, state, backend_start FROM pg_stat_ssl JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid;
发现每次调用边缘函数后都会多两个处于idle状态的开放连接,即使边缘函数完全执行完毕也不会关闭。这些闲置连接迅速堆积,很快就达到了60个连接上限——我仅从一个实例调用几次函数,就出现了10个闲置连接。
显然我在关闭连接的操作上有误,是否存在明显的错误?是否需要释放整个连接池?
内容的提问来源于stack exchange,提问作者progNewbie
相关产品推荐
相关产品推荐

