一个Web报表项目的性能分析和优化实践(一):小试牛刀,
一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL。
当报表数据量大的时候,一个图表要花4秒以上的时间。
以下是我的分析和体会。
1.我首先需要知道哪些函数执行了多少时间,哪些sql花了多少时间。
a.最笨最简单的方法是,每一个函数的调用开始和结尾都保存开始时间startTime和结束时间endTime, 进行计算。
b.写一个“拦截器”,拦截每一个方法的执行,计算时间。
这个又太难了,没啥思路。
c.想到Hibernate查询,真正执行sql语句的方法是query.list()方法。
因此,只需要计算query.list()这个方法的执行,大概就能得出每个函数的执行时间了。
很巧的是,我写了一个功能强大的BaseDao,大部分查询最终归结到了一个方法。
[java]
protected List executeQueryList(String hql, Map<String, Object> params, Integer firstResult, Integer maxResults) {
Query query = createQuery(hql, params);
if (firstResult > 0) {
query.setFirstResult(firstResult);
}
if (maxResults > 0) {
query.setMaxResults(maxResults);
}
Date startTime = new Date();
List list = query.list();
String costTime = CostTimeUtils.getCostTime(startTime);
println(query, costTime);
return list;
}
这样,我只需要在一个地方,计算耗费的时间,就大致知道了每个方法和sql语句的实际执行时间了。
2.看了下Hibernate打印出来的SQL语句和程序源码,发现执行的数据查询太多,平均每个0.02到0.05,少数需要0.34,0.35。
一个0.02s,查询几十次到上百次,花费的时间就多了。
3.少数查询要0.34,0.35, 应该是网络引起的??
后来,经过自己的分析,与同事好友的交流,可能的原因是查询的字段太多导致的,Hibernate通过反射向Java实体对象填充值,也需要花费一些时间。
然后,我又想到,TReport这个表字段确实不少,更关键的是我们把一些图表的信息存放在这个表里的longblob类型的字段。
4.字段的数据类型有影响么?
有些小数据量的字段,用的是longtext。
逐个将其统一为varchar。
5.统一Hibernate用法,方便查看HQL/SQL语句的执行时间。
以前我对项目进行重构过,现在大部分的查询都要经过BaseDao中的一个查询方法,站群系统,
[java]
Date startTime = new Date();
List list = query.list();
String costTime = CostTimeUtils.getCostTime(startTime);
println(query, costTime);
但是,还有很多查询没有经过这里,导致有的SQL执行时间,不方便查看。
6.最初,想查看每个方法执行时间的时候,我首先想到的是找一个这样的工具。
不过,最后还是没能找到。
JProfile之类的工具,还没怎么用过,抽空再学习和应用下。
7.针对查询用到的SQL语句,建立合适的索引。
这个还没有头绪,站群,正在摸索中。
8.查询方法执行效率不高?
[java]
public Treport getReportById(Integer reportId) {
String hql = "from Treport where reportId = :reportId";
Treport report = super.executeQueryUnique(hql, "reportId", reportId);
return report;
}
有的地方,根据HQL语句查询没有必要。
Treport表的主键就是reportId,可以使用Hibernate的get(id)来查。
多写了代码,维护麻烦,效率还不高。
我的感觉是:自己构造HQL语句查询,没有Hibernate的get方法效率高,没有具体去测试。
企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:潜江SEO http://qianjiang.4567w.com
人气文章
05-25
·寺庙工作人员当警察面鞭打小偷?网友...10-03
·大学操场有人飙车撞上女生致其左腿|...07-25
·山西晋城中村煤矿透水事故救援 12人...10-30
·公募紧盯经济转型 基金经理密集调研...10-17
·内蒙古远兴能源股份有限公司 2015年...09-17
·9·3阅兵中的八大“神秘数字”都有啥...12-31
·湖南规定:市县组织部长不得与同级书...07-24
·《快乐大本营》18周年 旋风少年杨洋...07-09
·高波:民国粉背后的“救亡压倒启蒙论”|07-07
·一家3个儿子患矮小症女儿却正常 专...11-21
·济南提公积金买房 一家最多可提8人|...09-25
·浙江15岁职高女生遭群殴凌辱 被用树...06-30
·(台海观澜)“十三五”福建深化闽台...10-08
·人大博导与弟子断绝师生关系 学生:...01-22
·宜昌康佳液晶彩电维修电话08-21
·三无驱蚊手环学校周围热卖 拆封后能...11-27
·质检总局:电商所卖蚕丝被五成抽查不...11-06
·“十三五”规划建议引爆a股主题投资|种地08-08
·扬州一女子带娃骑三轮坠河 摩托叔两...07-27
·历史上的“昭君出塞”:真的没那么传...