接口慢原因
接口慢可以从几个方面进行排查:
- 是否有比较耗时的sql
- 接口中是否请求了其它系统
- 应用代码里是否有比较耗时的逻辑
- 框架问题
- 数据库服务器过载
是否有比较耗时的sql
sql问题是最常见的原因,一般从以下几个方面进行排查:
- sql效率问题
增删改一般没有什么效率问题,多在查询sql上。直接在库里执行sql,查看执行时间。
sql查询语句如果涉及的表数据量比较大,或者关联表较多,比较复杂,都需特别注重性能测试。最好能在生产库中执行下sql查询语句。 - sql循环调用
这个也比较常见:在循环中写了sql,多次开启数据库连接session,速度肯定也快不了。如果接口过于复杂,一个接口里sql特别多,也容易出现速度慢问题。
尽量避免在代码中循环调用sql。 - 数据量过大导致sql慢
这个很好理解,大批量新增数据时容易出现。
接口中是否请求了其它系统
这种情况,很可能是其它系统响应速度慢造成。接口中如果涉及外对象,一定要在日志中记录好1)请求地址;2)请求报文;3)响应报文;4)发起请求前后的时间(日志框架会在记录请求和响应报文时,自动记录时间)
应用代码里是否有比较耗时的逻辑
这种情况比较少,一般对大对象进行排序、多重循环等操作容易造成明显的速度下降。代码中如果有双重或多重循环,开发人员应引起足够重视。
框架问题
使用mybatis时遇见过一次。当时把sql摘出来在数据库工具中执行秒出,上了生产环境后要1分半。后来通过这篇文章解决了问题:https://blog.csdn.net/weixin_41914928/article/details/121017367?spm=1001.2014.3001.5506
数据库服务器过载
数据库服务器性能较差,执行sql时间不稳定,有时10s,有时20s。对centos系统,使用top命令查看CPU和内存消耗情况。对Suse操作系统,使用topas命令查看。