/**

*作者:张荣华

*日期:2008-2-25

**/

之前有一篇文章讲到如何使用jamon来监控请求以及方法得调用(原文地址见:[url]http://www.iteye.com/post/354575 [/url]),本文属于其姊妹篇,使用jamon监控系统的sql调用及其调用效率。

需求:
1我们知道在使用hibernate得时候,我们可以打开show sql选项,可以直接查看sql语句调用的情况,那么当我们使用其他持久技术的时候我们也需要这个功能怎么办呢,没有关系,jamon能够帮我们做到。

2 很多时候,不同的程序员会写出不同的性能的sql,有时候可能会不小心或者因为不知道而写出性能很差的sql,我自己曾经就发生过这种事情,在500w条数据的表里使用了一个limit来分页,到后面,执行一条sql都需要几分钟,诸如此类的时候可能大家都有碰到过,如果能有监控sql性能的工具嵌在应用里该多好,当然有jamon就可以帮我们做到。

对于jamon来说,每一个query的执行之后的统计结果都会被保存下来,这些概要统计都以MonProxy-SQL开头。这些统计中包括查询执行的时间,有比如平均时间,执行总时间,最小执行时间,最大执行时间,这些东西难道不是我们正想要的吗。

那么让我们开始吧,我们知道,这些query执行的统计应该是在connection中被统计的,也就是说我们要代理一般的connection,而connection又是由datasource产生的,所以我们可以代理datasource,说干就干。

一个datasource接口中关于connection的方法只有两个:

也就是说我们只要override这两个方法即可。
根据这个思路我写了以下代码:

显然这个一个代理模式。接下来就是生成这个代理类,我是在spring中注册了这么一个类:

writeMonitorDataSource 所依赖的writeDataSource就是我们真正配置的datasource,比如:

好了,那么在使用datasource的时候,我们应该用哪个呢,当然是writeMonitorDataSource这个里,我们可以把它注入给jdbcTemplate,或者sessionfactory,或者其他需要用到datasource的地方。

到这里,就一切准备完毕了,我们可以看看我们sql语句的执行效率了(这个页面的地址为sql.jsp):
见图1
当然要我们的应用能够显示这个页面,我们需要把jamon的一组页面拷到我们的应用中,这一组页面包含在我提供下载的包中,最新的jamon版本是2.7。

我们可以看到id为153的那条sql语句执行了78ms,我要去看看这条sql语句是不是有点什么问题或者是否有优化的可能性。

当然,刚才说到每一条sql语句都是有统计平均时间,最大最小执行时间等等,没错,在另外一个页面jamonadmin.jsp上就包含这些内容
见图2

上面的图片代表hits表示执行次数,avg表示sql执行的平均时间,后面的min和max表示sql执行的最小耗时和最大耗时。从这里我们能够更直观的看到我们每条sql语句执行的情况。很有用的一个功能。

而且在上面那两个页面上,我们还可以选择把sql执行的结果导出来,可以导成xml或excel格式。

总结:使用jamon来监控我们的sql语句我觉得很有使用意义,而且使用jamon对我们的应用来说完全是松耦合的,根本不需要更改我们的业务逻辑代码,完全是可插拔的,我们也可以开发时使用jamon,部署时拔掉jamon。有了它能够使一些程序员能够更多一点的关注自己所写的sql的效率,当然如果之前开发的时候没有使用jamon也没有关系,即使上线后也可以查看一下sql语句是否有问题,比如哪些sql语句执行得比较频繁,是否存在给其做缓存得可能性等等。总之使用jamon在应用程序中来监控我们得sql语句具有很强得实用意义,

再次总结:jamon,很好,很强大。

用jamon来监控你的sql执行效率相关推荐

  1. mysql如何分析sql执行效率和进行效率优化

    [0]如何分析mysql中sql执行较慢的问题 步骤1.观察,至少跑一天,看看生产的慢sql情况: 步骤2.开启慢查询日志,设置阈值,比如超过5秒钟就是慢sql, 并将它抓取出来: 步骤3.expla ...

  2. 提高SQL执行效率的几点建议

    提高SQL执行效率的几点建议: 1.尽量不要在where中包含子查询 2.关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('20 ...

  3. SQL执行效率提升几万倍的操作详解!

    作者:风过无痕-唐 场景 我用的数据库是MySQL5.6,下面简单的介绍下场景 课程表: create table Course(c_id int PRIMARY KEY,name varchar(1 ...

  4. 如何测试sql服务器的性能测试,SQL执行效率和性能测试方法

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  5. mysql 非自然月统计_技本功|统计信息对SQL执行效率的影响

    点击蓝字 关注我们 在正文开始前,我们先补充一轮知识点. DING! 什么叫统计信息? 统计信息是数据库对所有表信息进行数据抽样后得出的数据统计,它是一个数据库优化器选择最佳执行计划的核心依据. 什么 ...

  6. 提高SQL执行效率的16种方法

    项目中优化sql语句执行效率的方法: 1)尽量选择较小的列 2)将where中用的比较频繁的字段建立索引 3)select子句中避免使用'*' 4)避免在索引列上使用计算.not in 和<&g ...

  7. mysql sql执行效率_一顿操作猛如虎,SQL执行效率提高250

    原标题:一顿操作猛如虎,SQL执行效率提高250 用的数据库是mysql5.6,下面简单的介绍下场景 课程表: 数据100条 学生表: 数据70000条 学生成绩表SC: 数据70w条 查询目的: 查 ...

  8. 一阵骚操作,我把SQL执行效率提高了10000000倍!

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:风过无痕-唐 http://www.cnblogs.com/tangyanbo/p/44 ...

  9. 一通骚操作,我把SQL执行效率提高了10000000倍!

    作者:风过无痕-唐 http://www.cnblogs.com/tangyanbo/p/4462734.html 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: create ...

最新文章

  1. android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor'
  2. [云炬ThinkPython阅读笔记]1.3 第一个程序
  3. mysql ansi_ANSI模式下如何运行MySQL
  4. FZU 1894 志愿者选拔
  5. 【CSS基础】实现 div 里的内容垂直水平居中
  6. 学习记录012-NFS
  7. Installing OwnCloud 9 on Debian 8
  8. SNS网站中怎样获取MSN联系人信息
  9. 中国石油大学--生活学习简易FAQ
  10. 【Java加密】JCA体系结构
  11. C语言求三角形的角的大小,c语言求三角形的面积及判断三角形类型
  12. 多重集合的排列与组合
  13. sdutacm-小雷的冰茶几
  14. 计算机开机进不去桌面,电脑开机直接跳过启动界面进去电脑桌面,想进bios进不去怎么办...
  15. 如何将原始SNP信息转化为0,1,2的矩阵形式
  16. 【C++ MFC开发】串口通信之多个编辑框输出
  17. 多表联合查询、嵌套查询
  18. 初级经济师报考条件,报考时间全攻略
  19. 预约活动(秒杀)项目中如何高效的保证下单交易成功?保证redis,mysql的最终一致性?
  20. jquery实现计算两个日期之间天数

热门文章

  1. 精准扶贫谋定产业化-农业大健康·万祥军:东平农业品牌化
  2. svn提示out of date的解决方法
  3. 移动端触屏网页的触摸事件
  4. poj1789(prim)
  5. MVC4.0网站发布和部署到IIS7.0上的方法【转:http://www.th7.cn/Program/net/201403/183756.shtml】...
  6. CSS position属性absolute relative等五个值的解释
  7. C#.NET 比较好用的tcp通信模板(服务器端篇)
  8. ASP.NET 程序中常用的三十三种代码(9)
  9. 关于自增id 你可能还不知道
  10. Q_DECL_OVERRIDE