`
ry.china
  • 浏览: 137172 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

用p6spy来观察Java程序中执行的所有SQL语句

    博客分类:
  • java
阅读更多

本想把 p6spy 结合 SQL Profiler 或 IronTrack SQL 的使用介绍掇凑于一块来写。简单点说,只是一贴上图样,篇幅便需拖拉难遂人愿,也好,索性把它们分成两个篇章。一来每篇主旨鲜明,二来五篇成一系列比起四更来的自然且吉利。
   前面讲过 p6spy 本身就可利用 Log4j 的 SocketAppender 向远端发送日志,SQL Profiler 不过是在这个基础上作了进一步拓展。而接下来要说的 IronTrack SQL 就略有不同了,看它带的 p6spy.properties 文件,里面有 IronTrack SQL 给 p6spy 定制的一个模块:module.ibeam=com.irongrid.ibeam.server.IBeamFactory。它用到了 log4j-1.2.8.jar,不过还得研究下 Log4j 在其中所起的作来。现在就来介绍 p6spy 结合 IrconTrack SQL 的使用,最好是你知道如何单独使用 p6spy。压缩包里有文档:是 IronTrackSQLdocsindex.html。
  p6spy + IronTrack SQL 观察 SQL 语句
   下载 IronTrack SQL:http://www.dlog.cn/uploads/files/IronTrackSQL.zip,网上很多文章说从 http://www.irongrid.com/ironeyesql 下载,而实际上这个域名不存在了。若是第一个地址无法下载。好再看使用步骤,解开 IronTrackSQL.zip,可以看到在第一级目录中有必须的 p6spy.ar、log4j-1.2.8.jar、irontracksql.jar、spy.properties、 irongrid.properies 文件。
  1. 把压缩包中的 irontracksql.jar 拷到 p6spy.jar 所在的目录中,比如 Tomcat 5.x 的 common/lib 目录中
  2. 压缩包中还有个 p6spy.properties 文件,我们就在这个文件基础上少作改动,把它放在加载 p6spy.jar 的加载器能见的位置上,如 Tomcat 5.x 的 common/classes 目录中。
   注意:如果你在 Tomcat 中,p6spy.jar 和 sqlprofiler.jar 是由 commons 加载器加载的,那么要用到的 log4j-1.2.8.jar 也必须放在与他们同一目录中由 cmmons 类加载器来加载,如果仍然在应用的 WEB-INF/lib目录中的话,log4j 的类对于 p6spy 和 sqlprofiler 来说不可见。如果你对于类加载器不熟的话,还是别把事情搞太复杂了,把那些 jar 文件全部放到应用的 WEB-INF/lib 中吧,但是配置连接池的时候又可能碰到新问题。
  3. 修改 p6spy.properties 文件,只启用你所用的 realdriver,如对于 oracle 是 realdrive=oraclejdbc.driver.OacleDriver。
  看到其中对模块 ibeam 的配置 monitorport=2000,我们就使用这个监听端口吧。
  4. 命令行下进到 IronTrackSQL 的解压目录,执行 java -jar irontracksql.jar 来启动IronTrack SQL,监听 p6spy 的 SQL 语句输出
  5. 启动应用,进行业务操作,就能在 IronTrack SQL 界面上直观的看到你需要的东西了。
  不多说了,看看界面吧,这个 IronTrackSQL 看起来比 SQL Profiler 要专业些。
  可设定监听端口,导出导入历史数据。
  irongrid.properties 文件中保存了 Iron TrackSQL 运行时的配置数据。与 SQL Profiler 相比,它有以下几个特点:
  1. 界面标志些,使用了 JFreeChart 来展示图表
  2. 既能实时监听,又能保存历史数据来对比分析
  3. 并不要求先启动 Iron TrackSQL,相比于 SQL Profiler 的被动监听,它采取的是主动去查询。更适于远程监控,想在何时监控就启动,完事就关闭,不至于像 SQL Profiler 那样一旦监听窗口坏了一下,就得重启应用。

 

 

 

 

 

 

一:P6SPY SQL PROFILER简介

弄JDBC,Hibernate,iBATIS时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。
用p6spy和SQL Profiler可以达到显示的那些参数原值的目的,可读性很强。然后可以直接把带有参数原值的sql语句拷贝到pl/sql或TOAD中跑一下,非常容易定位sql的错误在哪里。
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。
SQL Profiler 是一个由 Jahia.org 提供的基于 P6Spy 引擎的快速剖析工具,用来统计 SQL 查询语句以便了解哪里是性能瓶颈,在哪里创建索引或者采取相应的办法才能提高效率,并且能根据 SQL 查询语句的情况帮你生成合适的索引脚本。
这个小工具可以实时地显示数据库查询的情况,通过集成的 SQL 解析器,在访问大多数表与列上面建立统计分析,并生成索引脚本。当然,其它的信息也会进行收集和显示,比如:单个数据库请求的时间、一类请求的时间以及所 有请求的时间。因此,可以有效地通过视图的排序来检测数据的性能问题所在。这个工具对于大量的需要进行分析的请求是非常有用的,而不是人工一个个地去做分 析。当你需要知道比如对相同的表和列进行访问但是采用不同的查询值时,这种分组的查询可以用建立在 ANTLR 上的 SQL 解析器进行分析。

 

二:P6SPY与系统集成

首先,你的应用系统应当是基于数据库的,然后你需要去获取 P6Spy 相关的文件。下面介绍 P6Spy 的安装与使用的详细操作过程:
1. 下载 <http://www.p6spy.com/download.html > P6Spy 的文件包,也可以下载它的源文件包来研究;
2. 把 P6Spy 的 jar 包 p6spy.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;
3. 把 spy.properties 放到 lib目录下,如果是 Web 应用程序放在 YourWebApp/WEB-INF/ classes / 目录下,注意不是 lib / 目录下,同时tomcat/bin目录下放一份,否则将出现找不到数据库驱动异常
4. 修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时先都不用修改;
5. 打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;
6. 运行你的应用程序或 Web 应用程序,可以在 spy.log(该文件的位置根据你的需要存放位置在spy.properties的logfile属性进行设置) 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。

 

三:P6SPY +SQL Profiler与系统集成

首先,你的应用系统同样也应当是基于数据库的,而且安装了P6SPY,然后你需要去获取 SQL Profiler 相关的文件。下面介绍 SQL Profiler 的安装与使用的详细操作过程:
1. 下载 <http://sourceforge.net/projects/sqlprofiler/ > SQL Profiler 的文件包进行安装;
2. 把 sqlprofiler.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;
3. 把 spy.properties覆盖之前的那个spy.properties文件,位置目录跟p6spy是一样的,修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时不用修改;
4. 打开 spy.properties 文件,把 realdriver 的值改为你的程序的数据库驱动名称;
5. 注意要先运行 java -jar sqlprofiler.jar(在这个jar所在的目录下去运行) 来启动 SQL Profiler,并成功看到启动界面;
6. 然后再启动你的应用程序或服务器,并开始进行正常的系统请求处理操作;
7. 这样就可以在 SQL Profiler 图形化的界面上看到结果并进行分析了。

 

 

个人使用sqlprofiler配置没报错,但是没有日志,搞不清楚是怎么回事

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics