问题背景:
公司项目更新一个功能,所有的会员可以申请代理一款产品。提交申请时会传递会员信息代理产品信息等,大概有10个参数。可能由于前期申请代理的人比较少,所以比较正常。公司做了一次促销活动后,量突然大了起来,这个时候,客户反馈,申请代理时,APP反应很慢,大概需要等待10秒左右才反馈结果。经过APP端及JAVA后端同时测试发现是我提供的API响应速度比较慢。
问题排查:
1、通过测试服务器调用API测试发现,响应速度正常(说明代码没问题,至少是量少的情况下没问题)。
2、通过正式服务器数据库调用存储过程直接执行,响应速度正常。
3、通过正式服务器调用API测试发现,响应速度比较慢。
4、使用日志跟踪API各个模块执行执行,最后发现,调用存储过程执行返回结果这一步,响应速度比较慢。
至此,问题已经找到了:代码调用存储过程执行慢,待使用数据库管理器执行就很快。
猜测原因:sql预编译的问题。
解决方案:使用WITH RECOMPILE强制SQL重新编译(一般我们编写存储过程是不会加这个 WITH RECOMPILE 的)。

存储过程示例