本文提要

从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,对于慢sql,顾名思义就是花费较多执行时间的语句,它带来的影响也比较恶劣,首先是执行时间过长影响数据的返回速度,其次,慢sql的长时间执行也会消耗和占用mysql的系统资源,影响其他的sql语句执行,过多的慢sql极其影响性能,如果系统流量或者并发量较大的情况下,过多的执行慢sql很有可能造成mysql的死锁以致于mysql服务无法正常使用。
druid整合到项目中以及druid监控的开启已经持续了一段时间,因此对于慢sql的监控和整理也大致有了一些结果,本篇文章就试着从日志文件和监控面板中找出几条慢sql并进行优化。

优化步骤

总结了一下,大致步骤如下:

  • 定位优化对象的性能瓶颈;

  • 明确优化目标;

  • 从explain入手分析;

  • 找到优化方法;

找出慢sql

首先进入druid监控后台,查看一下这几天的运行日志后,慢sql的大致情况,如图:
电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

从监控后台看到的数据只是一个粗略的统计,是一个总览记录,想要看到详细的执行记录及其中的慢sql统计可以通过日志文件,这个功能也已经整合到项目中,直接在tomcat的logs目录即可查看。
电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

日志文件内容节选:

//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