You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查Next.js应用部署到Vercel后运行缓慢的问题?

Vercel 部署 Next.js + Prisma + RDS Postgres 性能问题排查步骤

1. 网络链路排查

  • 先做基础数据库查询耗时对比:新增一个测试接口,仅执行Prisma无业务查询await prisma.$queryRawSELECT 1``,分别统计本地调用、Vercel部署后调用的耗时,如果部署后基础查询耗时比本地高数百ms,优先判定为跨区域网络问题。
  • 核对部署区域一致性:确认RDS实例的可用区与Vercel Serverless函数的部署区域完全一致,跨区域访问数据库会带来百ms级的固定延迟,可在Vercel项目设置中将函数部署区域修改为与RDS同区域。
  • 检查RDS访问策略:确认RDS安全组、网络ACL没有额外的流量校验、geo拦截等规则,避免不必要的网络开销。

2. Prisma 客户端配置排查

  • 检查Prisma连接池配置:Serverless环境下默认连接池配置可能不适配,根据Vercel函数并发上限调整connection_limit参数,免费版Vercel并发上限为10,可将连接字符串配置为postgresql://xxx:xxx@xxx:5432/xxx?connection_limit=10&connect_timeout=10,避免连接不足或超时重试带来的延迟。
  • 确认Prisma实例全局复用:避免每次请求都新建Prisma实例,每次新建实例都会触发数据库连接重建,显著增加耗时,推荐全局单例复用方案:
import { PrismaClient } from '@prisma/client'

const globalForPrisma = globalThis as unknown as { prisma: PrismaClient }

export const prisma = globalForPrisma.prisma || new PrismaClient()

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
  • 校验Prisma引擎生成逻辑:在package.json的build脚本中添加prisma generate,确保构建时生成适配Vercel运行环境的Prisma引擎,避免运行时加载异常带来的额外开销。

3. Vercel 运行环境排查

  • 排查冷启动影响:如果只有首次请求慢,后续请求速度恢复正常,属于Serverless函数冷启动特性,可通过配置函数预热、将高频接口迁移到边缘函数降低冷启动影响。
  • 分析请求耗时分布:在Vercel项目后台的Analytics面板中查看请求各环节耗时,明确是函数执行耗时、网络传输耗时还是静态资源加载耗时,缩小排查范围。
  • 优化服务端逻辑:检查是否存在串行的Prisma查询,可修改为并行查询减少耗时叠加;本地开发可能存在缓存机制掩盖慢查询问题,部署后无缓存会暴露性能缺陷。

4. 数据库层面排查

  • 开启Prisma查询日志:初始化Prisma时开启查询日志,统计每个查询的实际执行时间:
const prisma = new PrismaClient({
  log: ['query', 'info', 'warn', 'error'],
})
  • 分析慢查询执行计划:将日志中标记的慢查询放到RDS查询编辑器中执行,查看执行计划,确认是否存在未建索引导致的全表扫描,本地开发数据量通常远小于RDS,会出现本地查询快、RDS查询慢的情况。
  • 检查RDS资源使用率:查看RDS实例的CPU、内存、IOPS指标,确认是否有异常资源占用,即使无对外流量,未优化的定时任务、批量查询也可能导致资源打满。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:45:00