一、主要用途:
采用对应用系统无侵入的方式,截获并记录应用系统访问数据库的所有记录,并进行初步分析后,得出对数据库索引的建立建议。
二、配置和使用步骤:
1、配置待测试应用系统
添加P6Spy.jar,并修改应用的数据库驱动为“com.p6spy.engine.spy.P6SpyDriver” 。
2、配置P6Spy
将spy.properties放在应用的classes目录下,然后将原来的JDBC驱动类配置到P6spy的配置文件spy.properties中的realdriver项就可以了。注意尽量不要修改其他配置,尤其是其中的logger配置。
3、启动SQLProfiler
SQLProfile是一个独立的应用程序,启动方式为在sqlprofiler.jar所在目录中执行命令行:java –jar sqlprofiler.jar命令。
4、执行测试:
然后启动应用,或者在执行应用需要监控的操作之前启动SQLProfiler也可。可以根据实际情况灵活使用。
至此,直接操作应用和SQLProfiler界面进行监控、分析即可得到。
三、附录: P6Spy + SQLProfiler项目绍
1、P6spy
P6spy是一个基于Java的开源的项目,它所能实现的功能就是将应用系统访问数据库的情况记录下来,它所记录的数据包括发送的实际语句、预编译语句、语句执行的时间、执行语句消耗时间、执行语句的数据库连接编号等。
其格式为:
1124430077712|266|1|statement||select count(*) as nodeTotalNum from wr_Activity where procinstid= ?| select count(*) as nodeTotalNum from wr_Activity where procinstid= 1
表示在2005.08.19 01:41:17.712时编号为1的statement向数据库发送了“select count(*) as nodeTotalNum from wr_Activity where procinstid= 1”的SQL请求,它的与编译语句为“select count(*) as nodeTotalNum from wr_Activity where procinstid= ?”,该语句在数据库中的执行时间为266毫秒。
P6spy的优点就是不侵入应用系统,而且非常容易配置。 P6spy官方网站http://www.p6spy.com/documentation/index.htm。
2、SQLProfiler
从上面的P6spy的介绍中我们可以看到,P6spy生成的记录是一个被格式化后的字符串,阅读起来比较困难,更不利于分析。SQLProfiler是一个基于Java的开源项目(已经中止),它能够将P6spy记录的日志通过一个界面来显示出来。
SQLProfiler是一个单独运行的Java应用程序,它和P6spy是通过Java socket来进行通讯的。SQLProfiler运行后启动一个服务并不断的监听指定端口,当P6spy需要记录日志时就会通过socket连接到SQLProfiler发送日志信息。
SQLProfiler不仅仅使P6spy记录文件易于阅读,它还对数据库执行过的语句进行分类和统计,统计出这些SQL语句的执行次数、总执行时间以及这类语句在所有的数据库语句执行时间中所占用的比例。另外对一些条件查询和更新语句还分析出该语句涉及到数据库表的那些字段(便于建立索引)并能自动生成创建数据库索引语句。
另外:Sqlprofiler还提供了简单的分析功能,它能够通过折线图的形式直观的表示发生的语句数量与时间的关系、向数据发送数据量于时间关系以及数据库输出数据量与实践的关系。