用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(四. 结合 SQL Profiler)

p6spy 虽好,但把 SQL 语句输出到文件或是控制台中看起来有些吃力。若能图形界面展示出来便可一目了然,亲切许多。有种方法是配置 p6spy.properties 使用 Log4j 的 SocketAppender,然后启动 Log4j 的 org.apache.log4j.net.SocketServer 界面,或是在 Eclipse log4j plug-in 中也能观察所执行的 SQL 语句。

不过还有种更专业做法,本篇将介绍 p6spy 如何结合 Sql Profiler 或 IronTrack SQL 来使用,并附以贴图,来感受一下吧。也以此来完成关于 p6spy 的这个系列。其实你到后面也会发现,即便是用 Sql Pofier 的实现过程也是借助了 Log4j 的 SocketApender,你可以从它自己带的 p6spy.properties 文件中的配置看出来,即其中的 log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender 这么一个配置。

结合 Sql Profiler 的文章网上较多,这里参考了文后链接中的几篇文章写就而成。下面分别以结合 Sql Profiler 和 IronTack SQL 说明。关于 p6spy 的使用配置可参考:用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(二. Tomcat 下的配置)。你也可以配置在应用中,即把相关 jar 包放在应用的 WEB-INF/lib 下,p6spy.properties 放在应用的 WEB-INF/classes 中。所以下面有关于 p6spy 的配置就不再重复了。

p6spy + Sql Profiler 观察 SQL 语句

Sql Profiler 的下载地址:http://sourceforge.net/project/showfiles.php?group_id=80782,当前版本是 0.3,下载的文件是 sqlprofiler-0.3-bin.zip。

1. 把压缩包中的 sqlprofiler.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-x.x.x.jar 也必须放在与他们同一目录中由 cmmons 类加载器来加载,如果仍然在应用的 WEB-INF/lib目录中的话,log4j 的类对于 p6spy 和 sqlprofiler 来说不可见。如果你对于类加载器不熟的话,还是别把事情搞太复杂了,把那些 jar 文件全部放到应用的 WEB-INF/lib 中吧,但是配置连接池的时候又可能碰到新问题。
3. 修改 p6spy.properties 文件,启用你所用的 realdriver,如对于 oracle 是 realdrive=oraclejdbc.driver.OacleDriver。
4. 命令行下进到 sqlprofiler.jar 所在的目录,执行 java -jar sqlprofiler.jar,出现界面,监听 p6spy 的 SQL 语句输出
5. 启动应用,进行业务操作,就能在Sql Profile 界面上直观的看到你需要的东西了。界面上有三个标签,分别看截图:

sqlprofiler1.jpg 
Profiler 标签页
sqlprofiler2.jpg
Logger 标签页
sqlprofiler3.jpg 
Analysis 标签页
sqlprofiler4.jpg 
生成建议创建索引的脚本

再看看保存成的建议创建索引的 SQL 脚本:

注:你不一定要在应用所在的机器上运行 SQL Profiler,并且常常需要在在某台机器上监听应用服务器的 SQL 语句执行,方法就是修改 p6spy.properties 中的 log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost,把 RemoteHost 参数由 localhost 改成你要机器的 IP,然后在那台机器上运行 SQL Profiler 监听程序即可。还有 SQL Profiler 要比应用先启动,因为它是以被动的方式来监听 p6spy 的输出。

p6spy + IronTrack SQL 观察 SQL 语句

考虑到篇幅和文章主题的鲜明性,还是把这部分内容放到单独日志中,请关注下一篇:用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(五. 结合 IronTrack SQL)

参考:1. 使用Log4j搭建一个日志服务器
        2. 利用P6SPY +SQL Profiler记录、统计web app对数据库的操作
        3. P6Spy + SQL Profiler + IronTrackSQL【修改】

类别: Java/JEE. 标签: , , , . 阅读(96). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar