当前位置: 代码迷 >> SQL >> P6Spy + SQL Profiler + IronTrackSQL【批改】_转
  详细解决方案

P6Spy + SQL Profiler + IronTrackSQL【批改】_转

热度:182   发布时间:2016-05-05 13:31:51.0
P6Spy + SQL Profiler + IronTrackSQL【修改】_转

P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架.

通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。

弄hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全PreparedStatement一样,用?来代替的。
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。
p6spy: http://www.p6spy.com/

一、P6Spy的安装与使用
1、下载P6Spy的文件包,也可以下载它的源文件包来研究。
2、将p6spy.jar放到WEB-INF/lib目录下,将spy.properties放到WEB-INF/classes目录下。
3、修改 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver其它的都不用更改。
4、修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver
5、运行你的应用程序或Web应用程序,可以在spy.log里看到监测到的sql详细记录信息了。
6、驱动程序加载先后的问题解决
  如果spy.log里出现
  你的程序的数据库驱动名称 is a real driver in spy.properties, but it has been loaded before p6spy. p6spywill not wrap these connections. Either prevent the driver fromloading, or try setting 'deregisterdrivers' to true in spy.properties
  请把spy.properties文件里的deregisterdrivers=false改为deregisterdrivers=true,重新运行即可。

我的日志记录产生在 %TOMCAT_HOME%\bin下,此log位置可以能过修改 logfile??= x:\x_dir\spy.log 来控制


打开看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。
SQL Profile: http://www.jahia.net/jahia/page597.html

二、结合SQL Profiler进行图形化监控与使用
1、下载SQL Profiler的文件包进行安装。
2、把p6spy.jar及sqlprofiler.jar放到WEB-INF/lib目录下,将SQL Profiler自带的spy.properties覆盖原来的classes目录下文件
3、修改 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver其它的都不用更改。
4、修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver
5、注意要先运行 java -jar sqlprofiler.jar 来启动SQL Profiler,并成功看到启动后界面;
6、然后再启动你的应用程序或服务器,并开始进行正常的系统请求处理操作;
7、这样可以在SQL Profiler图形化的界面上看到结果并进行分析了。
并且可以通过保存按钮导出数据库优化建议的索引脚本。

IronTrack SQL: http://www.irongrid.com/ironeyesql

三、结合IronTrack SQL进行图形化监控与使用
1、下载IronTrack SQL的文件包进行安装.
2、把irontracksql.jar、p6spy.jar、log4j-1.2.8.jar放到classpath中,如果是Web应用程序则放在YourWebApp/WEB-INF/lib/目录下.
3、把spy.properties放到classes目录下,如果是webapp就放在YourWebApp/WEB-INF/classess/目录下,记得不是lib/目录.
4、修改你程序的数据库驱动名称为P6Spy的驱动程序名称com.p6spy.engine.spy.P6SpyDriver其它的都不用更改.
5、打开spy.properties文件,把realdriver的值改为你的程序的数据库驱动名称.
6、设置监听端口号monitorport=2000
6、先运行 java -jar irontracksql.jar 来启动IronTrack SQL.
7、再启动你的应用程序或服务器;
8、可以在 IronTrack SQL 图形化的界面上看到结果并进行分析了。

网上好多帖子都是说,修改原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver
然后修改spy.properties 中的 realdriver值为原有的JDBC Driver
如果在spring开发环境中使用org.springframework.jdbc.datasource.DriverManagerDataSource来模拟dataSource是不会生效的,

代码

<script>render_code();</script>

?

Code
<!-- -->?1<bean?id="dataSource"?class="org.springframework.jdbc.datasource.DriverManagerDataSource">
?2<property?name="driverClassName">???
?3<value>com.sybase.jdbc2.jdbc.SybDriver</value>???
?4</property>???
?5<property?name="url">???
?6<value>jdbc:sybase:Tds:192.168.0.2:6100/db</value>???
?7</property>???
?8<property?name="username">???
?9<value>usr</value>???
10</property>
11<property?name="password">???
12<value>pwd</value>
13</property>
14</bean>???
15
16


因为在spring加载时我们无法控制先加载哪个,spring会报错不能使用com.p6spy.engine.spy.P6SpyDriver连接到数据库,
其实p6spy只是想做jdbc的代理,而不是真正想连数据库,而spring却不知道这些,所以应该采用另外一种方式来集成p6spy

代码

<!-- -->?1<bean?id="dataSourceTarget"?class="org.springframework.jdbc.datasource.DriverManagerDataSource">???
?2????<property?name="driverClassName">???
?3????<value>com.sybase.jdbc2.jdbc.SybDriver</value>???
?4????</property>??
?5????<property?name="url">???
?6????<value>jdbc:sybase:Tds:192.168.0.2:6100/db</value>???
?7????</property>???
?8????<property?name="username">???
?9????<value>usr</value>???
10????</property>???
11????<property?name="password">???
12????<value>pwd</value>???
13????</property>???
14</bean>???
15<bean?id="dataSource"?class="com.p6spy.engine.spy.P6DataSource"?destroy-method="close">???
16????<constructor-arg>???
17???????<ref?local="dataSourceTarget"/>???
18????</constructor-arg>???
19</bean>???

<script>render_code();</script>
这样就可以把p6spy集成到spring中去了。
令:网上好多文章都介绍使用sqlprofiler和p6spy配合,但是IronTrackSQL感觉更好一些!
关于如何使用sqlprofiler,IronTrackSQL,配置很简单
对于sqlprofiler只要把sqlprofiler自带的spy.properties放到classpath下就可以了,然后java -jar sqlprofiler.jar
对于IronTrackSQL,还要把irontracksql.jar也放到classpath下,然后java -jar irontracksql.jar

  相关解决方案