本文提要
从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,对于慢sql,顾名思义就是花费较多执行时间的语句,它带来的影响也比较恶劣,首先是执行时间过长影响数据的返回速度,其次,慢sql的长时间执行也会消耗和占用mysql的系统资源,影响其他的sql语句执行,过多的慢sql极其影响性能,如果系统流量或者并发量较大的情况下,过多的执行慢sql很有可能造成mysql的死锁以致于mysql服务无法正常使用。
druid整合到项目中以及druid监控的开启已经持续了一段时间,因此对于慢sql的监控和整理也大致有了一些结果,本篇文章就试着从日志文件和监控面板中找出几条慢sql并进行优化。
优化步骤
总结了一下,大致步骤如下:
定位优化对象的性能瓶颈;
明确优化目标;
从explain入手分析;
找到优化方法;
找出慢sql
首先进入druid监控后台,查看一下这几天的运行日志后,慢sql的大致情况,如图:
从监控后台看到的数据只是一个粗略的统计,是一个总览记录,想要看到详细的执行记录及其中的慢sql统计可以通过日志文件,这个功能也已经整合到项目中,直接在tomcat的logs目录即可查看。
日志文件内容节选:
//1.图片表查询sql [10:13:37] StatFilter - slow sql 1572 millis. select * from ssm_picture WHERE type = ? and grade = ? limit ?,? ["1","1",0,10] ... //2.更新文章表sql[14:19:12] StatFilter - slow sql 1926 millis. update ssm_article set article_title=?,article_content=?, add_name=? where id=? ["11","<p>1324354657usdfghjnkm,zxvb nm,,fgfhjtfggggggggggggggggggg<br/></p>","22","1033"] ... //3.文章表查询sql[15:07:04] StatFilter - slow&n