一、主要用途:
采用对应用系统无侵入的方式,截获并记录应用系统访问数据库的所有记录,并进行初步分析后,得出对数据库索引的建立建议。
二、配置和使用步骤:
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 还提供了简单的分析功能,它能够通过折线图的形式直观的表示发生的语句数量与时间的关系、向数据发送数据量于时间关系以及数据库输出数据量与实践的关系。