在开发测试中,对接口进行压力测试,通过监控手段发现数据库的cpu使用率在90%以上,使用jmeter仅仅用了50个并发就这样。
系统是老项目,使用的struts,jdbc
分析1:接口中的持久层代码,一个一个的排查,单独拿出来查看执行计划,发现所有的sql都走了索引,不存在全表扫描的情况。
分析2:sql里面有的带有select * ,将*改成需要的字段,结果发现并没有很高的改善。
分析3:注代码,把sql一个一个的注掉,看是哪个sql的问题
终于,发现了,这里使用的是IN语法,我们自己写了个方法,对IN语法进行了截取,所以使用IN语法的时候是不会使用问号(?)进行预编译的,导致了在执行sql的时候,数据库每次都要去编译一次。最后把这里改了,数据库的CPU使用率就下降到15%以内了。
唉,记录一下。