最近发现了一个好工具,可以实现数据库访问操作的动态监测.该工具就是P6SPY(是开源项目:http://www.p6spy.com).
一、P6SPY 简介
P6SPY模拟并代理了一个标准的JDBC driver,我们只要将系统的JDBC切换到P6SPY的JDBC driver上,同时在P6SPY中配置实际的JDBC,就可以使用P6SPY提供的数据访问性能检测功能。
l 下边以Hibernate为例,来说明P6SPY的配置,配置步骤如下:
1. 从P6SPY网站(http://www.p6spy.com)下载其软件包p6spy-install.zip,解压得到两个文件:p6spy.jar(运行包)和spy.properties(配置文件)
2. 修改hibernate配置文件hibernate.cfg.xml,将driver_class修改为P6SPY提供的JDBC driver class :
com.p6spy.engine.spy.P6SpyDriver
注:如果用jdbc或其他的orm映射工具,只需要修改相应的dirverclass即可。
3. 修改P6SPY的配置文件spy.proterties,制定用于实际操作的jdbc driver:
…
realdriver=com.mysql.jdbc.Driver
…
4. 将p6spy.jar放在运行环境中的classpath中,将配置文件spy.properties放在src目录的根节点下面。
到此为止,P6SPY的配置基本完成。这样,我们就在应用程序与底层JDBC之间夹了一个中间层,通过这个中间层,我们可以截获所有的底层JDBC操作,从而可以实现SQL执行效率的分析以及执行结果的统计分析。
可以统计如下信息:
某条SQL的执行时间,执行次数,以及在全部sql中的执行频率,相对时间消耗比等数据。根据统计结果,我们可以找到对系统性能影响最大的sql操作,并对其进行优化。
P6SPY的默认输出文件是spy.log,其日志格式如下:
1143687527500|-1||debug||com.p6spy.engine.common.P6SpyOptions reloading properties
1143687527531|-1||info||Using properties file: D:\project\box2.0\exploded\WEB-INF\classes\spy.properties
1143687527531|-1||info||No value in environment for: getStackTrace, using: false
1143688656312|-1||resultset|select custmailgr0_.id as id, custmailgr0_.mailName as mailName, custmailgr0_.comments as comments, custmailgr0_.userName as userName, custmailgr0_.password as password, custmailgr0_.created as created, custmailgr0_.createdBy as createdBy, custmailgr0_.lastUpd as lastUpd, custmailgr0_.lastUpdBy as lastUpdBy, custmailgr0_.bizresId as bizresId, custmailgr0_.province as province, custmailgr0_.city as city, custmailgr0_.isReceiver as isReceiver from Custmailgruop custmailgr0_ where (isReceiver=1 )|bizresId = 3, city = null, comments = null, created = null, createdBy = 17, id = 0, isReceiver = 1, lastUpd = null, lastUpdBy = 17, mailName = box@staff.monternet.com, password = ******, province = null, userName = box
可以看到,日志文件比较复杂,如果单纯的看日志文件会很繁琐,而且不容易统计。因此还要介绍一个图形化的监控界面工具,该工具可以实时监控Sql执行过程,并对执行过程进行统计分析,为数据库优化提供依据。该工具就是Sql Profiler。
二.Sql Profiler 简介:
Sql Profle提供了直观的Sql统计结果,并会给出一些数据库优化的建议,其安装配置运行步骤如下:
1. 在Sql Profiler网站(http://www.jahia.org)下载Sql Profiler并解压,得到两个文件:
SqlProfiler.jar(运行包)和spy.properties(P6SPY配置文件)
2. 修改spy.properties配置文件,制定实际使用的JDBC driver(参考上边的P6SPY配置).
3. 启动Sql Profiler:
Java –jar sqlprofiler.jar (如果报OutOfMemory,执行 java –Xmx 256 –jar sqlprofiler.jar)
4. 查看sql执行记录及统计页面:
分3个Tab:
1〉 Profiler Tab 分上中下3部分:
I〉 上部:显示当前正在执行的sql的实时信息,每秒刷新一次。
II〉 中部:显示优化统计结果。当按下工具栏的暂停按钮时,工具开始优化分析,并将结果显示在这个栏中。
III〉 下部:显示了当前选定的sql的详细信息
2〉 Logger tab:
显示的是每条sql执行的log信息
3〉 Ananlysis tab:
统计信息