用p6spy和sqlprofiler来分析jdbc sql日志
1.简介
p6spy是针对数据库访问的动态监测框架,经长时间的发展已经非常成熟,p6spy模拟了一个标准的JDBC Driver,代理了真正的底层JDBC驱动。也就是说,我们只要把系统中所用的jdbc驱动配置成p6spy 驱动,把p6spy配置中的realdriver配置为我们实际使用的JDBC Driver,就可以使用他的性能监测功能了。
Sqlprofiler是p6spy的周边资源,p6spy用日志文件记录,看起来比较麻烦,Sqlprofiler为我们提供了一个图形化的监控界面,可以实时监控SQL执行过程,对执行结果进行统计并加以优化。
2.下载
p6spy
http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip
sqlprofiler
http://heanet.dl.sourceforge.net/sourceforge/sqlprofiler/sqlprofiler-0.3-bin.zip
3.配置p6spy
解压p6spy-install.zip,把p6spy.jar拷贝到我们项目里的lib下,spy.properties放到源码的根目录下就可以了
修改spy.properties
realdriver=org.gjt.mm.mysql.Driver #实际使用的数据库驱动程序的名字
appender=com.p6spy.engine.logging.appender.StdoutLogger
在设置数据源或者配置数据库连接的地方,
修改driver为:com.p6spy.engine.spy.P6SpyDriver
如修改hibernate.cfg.xml:
<property name="hibernate.connection.driver_class">
<!-- com.mysql.jdbc.Driver-->
com.p6spy.engine.spy.P6SpyDriver
</property>
p6spy的基本配置已经完成,我们要做的只是简单切换JDBC 驱动,位于应用和jdbc之间的p6spy可以截获所有的jdbc操作,就可以很容易的实现SQL执行效率的判定及执行结果的分析统计,如sql的执行时间、次数、频度等。
运行一个数据库操作后就可以看到p6spy的日志,发现他是不是很容易看的,下面的Sqlprofiler就解决了这个问题。
4.配置Sqlprofiler
解压sqlprofiler-0.3-bin.zip,把spy.properties拷贝到项目中,覆盖之前的spy.properties,要改的也只是realdriver,可以看到配置文件中有log4j,这就需要我们吧log4j的jar拷贝到应用中。
sqlprofiler.jar并不需要拷贝到应用中,他需要我们来执行:
java -Xmx256m -jar sqlprofiler.jar
spy.properties片断:
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true
p6spy 通过SocketAppender 向sqlprofiler发送日志信息,sqlprofiler启动后就开始监听本机的4445端口,在应用中执行数据库操作后就可以在sqlprofiler的界面中看到sql语句的执行结果。
p6spy是针对数据库访问的动态监测框架,经长时间的发展已经非常成熟,p6spy模拟了一个标准的JDBC Driver,代理了真正的底层JDBC驱动。也就是说,我们只要把系统中所用的jdbc驱动配置成p6spy 驱动,把p6spy配置中的realdriver配置为我们实际使用的JDBC Driver,就可以使用他的性能监测功能了。
Sqlprofiler是p6spy的周边资源,p6spy用日志文件记录,看起来比较麻烦,Sqlprofiler为我们提供了一个图形化的监控界面,可以实时监控SQL执行过程,对执行结果进行统计并加以优化。
2.下载
p6spy
http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip
sqlprofiler
http://heanet.dl.sourceforge.net/sourceforge/sqlprofiler/sqlprofiler-0.3-bin.zip
3.配置p6spy
解压p6spy-install.zip,把p6spy.jar拷贝到我们项目里的lib下,spy.properties放到源码的根目录下就可以了
修改spy.properties
realdriver=org.gjt.mm.mysql.Driver #实际使用的数据库驱动程序的名字
appender=com.p6spy.engine.logging.appender.StdoutLogger
在设置数据源或者配置数据库连接的地方,
修改driver为:com.p6spy.engine.spy.P6SpyDriver
如修改hibernate.cfg.xml:
<property name="hibernate.connection.driver_class">
<!-- com.mysql.jdbc.Driver-->
com.p6spy.engine.spy.P6SpyDriver
</property>
p6spy的基本配置已经完成,我们要做的只是简单切换JDBC 驱动,位于应用和jdbc之间的p6spy可以截获所有的jdbc操作,就可以很容易的实现SQL执行效率的判定及执行结果的分析统计,如sql的执行时间、次数、频度等。
运行一个数据库操作后就可以看到p6spy的日志,发现他是不是很容易看的,下面的Sqlprofiler就解决了这个问题。
4.配置Sqlprofiler
解压sqlprofiler-0.3-bin.zip,把spy.properties拷贝到项目中,覆盖之前的spy.properties,要改的也只是realdriver,可以看到配置文件中有log4j,这就需要我们吧log4j的jar拷贝到应用中。
sqlprofiler.jar并不需要拷贝到应用中,他需要我们来执行:
java -Xmx256m -jar sqlprofiler.jar
spy.properties片断:
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true
p6spy 通过SocketAppender 向sqlprofiler发送日志信息,sqlprofiler启动后就开始监听本机的4445端口,在应用中执行数据库操作后就可以在sqlprofiler的界面中看到sql语句的执行结果。
irini
2007-01-08 14:04:56
评论:2
阅读:566
引用:0
回复游客问题
@2007-02-10 09:02:34 irini
我想你应该先看一下下面两个问题:
1. 在p6spy 和 sqlprofiler 都不配置的情况下sql操作是否正常
2. 只配置p6spy,sql操作后p6spy的日志正常记录了吗?
如果上两个问题都是正常的,那就只是sqlprofiler 的配置问题了,看一下上面的配置或找其他文章仔细看一下应该就可以了,如果还有问题可以把问题详细记录下来,贴在这里,或给我发邮件duysh@163.com
1. 在p6spy 和 sqlprofiler 都不配置的情况下sql操作是否正常
2. 只配置p6spy,sql操作后p6spy的日志正常记录了吗?
如果上两个问题都是正常的,那就只是sqlprofiler 的配置问题了,看一下上面的配置或找其他文章仔细看一下应该就可以了,如果还有问题可以把问题详细记录下来,贴在这里,或给我发邮件duysh@163.com
@2007-01-31 11:52:42 游客
配置好了,而且sqlprofiler也显示连接到p6spy了,但执行程序操作时就是看不到对应的执行的sql语句!??是怎么回事情呢!?
