关闭

我的SQL在哪里--SQL跟踪工具P6Spy介绍(s00n原作)

标签: sql工具jdbcweblogicfilterstring
2350人阅读 评论(0) 收藏 举报
分类:
我的SQL在哪里(s00n原作)
-SQL跟踪工具P6Spy介绍
 
 
一、      P6Spy介绍
1.       简介
P6spy是一个开源项目,可以用来拦截JDBC调用,记录JDBC调用的日志信息,并可以根据调用时间长短的时间设置来记录日志,P6Spy包括两个组件P6Log,P6Outage
2.        版本
P6Spy version 1.3 (www.p6spy.com)
3.    P6Log组件
按需记录JDBC日志
4.       P6Outage组件
可以检测到记录运行时间较长的JDBC statement.,这些可能会影响到数据库的运行效率,并可将这些调用产生日志。
# outagedetection=true|false    (是否记录较长时间运行的statement)
# outagedetectioninterval=时间 (以秒记)
 
二、      工具的使用范围,目的,优点
5.       范围
开发环境
6.       目的
*         在确定应用程序性能的时候,更多地会关注其中SQL语句的执行情况及执行时间
*          调试程序的时候,想知道传入SQL的参数数值
*          修改程序的时候,并不想过多的关注其他人所写的程序细节,只要知道执行的SQL语句
*          比较关心程序的连接池中连接使用情况
7.       优点
*         不用去写很多传SQL参数值的语句
Log.debug(XXX.class, "referenceNo:" + entity.getReferenceNo());
*         不用去写调试sql的语句
Log.debug(XXX.class, "sql:" + sql);
*         页面执行某个操作,不用修改任何程序,即可知道程序做了哪些数据库操作
*         可以查看每个SQL的执行效率情况,给SQL调优做一定的参考
*         可以查看LOG文件,参考某个JDBC Transction的执行情况
*         可以通过配置过滤出你关心的SQL,以及过滤掉你不关心的SQL
8.       缺点
 
 
三、      修改工具源代码文件(为便LOG文件不过大,减少一些不必要的LOG)
9.       P6ResultSet.java   
         注释//P6LogQuery.log("resultset", query, buffer.toString());
         程序每次的resultSet.next()信息都会记录到LOG表,而且不能通过过滤器来过滤,为减少LOG表的大小,这里注释。
10. FormattedLogger.java
         加入如下语句
        sql=sql.length()>1000?sql.substring(0,1000)+"......":sql;
   prepared=sql.trim().length()>0?"":prepared;
         //对于有些SQL的参数有clob字段,这样LOG文件会非常的大.所以做截取.
        //另外当sql有值时,我们过滤掉prepared的字符,以减少LOG文件的大小
 
四、      在GSBL开发环境安装
11. 配置文件spy.properties
*         加入此行realdriver=oracle.jdbc.OracleDriver
*         修改
filter=true       //是否过滤需要或不需要记录的信息
include =
exclude=
*         append=false    //每次重新生成LOG文件
*         dateformat=yyyyMMdd:HHmmss:SSS    //设置日期格式
*         logfile     = spy.log   //设置LOG文件名 
*         excludecategories=info,debug,result,batch,resultset //不用记录日志的categories
 
12. 上传p6spy.jar
放在/weblogic81/server/ext/下
13. 上传spy.properties
放在/weblogic81/server/ext/下
14. startWeblogic.sh
修改bea/weblogic700/server/bin/startWeblogic脚本,
:${WL_HOME}/server/ext/p6spy.jar:${WL_HOME}/server/ext
15. 数据库连接Driver Classname
在weblogic console的Services/JDBC/Connection Pools下把所有的Connection Pool的
Driver Classname改成com.p6spy.engine.spy.P6SpyDriver
 
五、      对环境的影响
从上面安装来看,P6Spy只做了一层Driver的拦截器,与程序无耦合性,除了Driver改成了P6Spy的,程序其他地方并没有任何的改变,这层拦截器除了可能有略微的性能下将,对程序其他方面没有任何的影响。而这点性能下降,在开发环境开发人员无法感觉到,相比所带来的好处,可以忽略。
 
六、      LOG文件
16. 位置
         /user_projects/domains/mydomain/spy.log
17.文件生成规则
         append=false    //每次重起服务器重新生成LOG文件
 
七、      LOG文件内容格式
current time|execution time|connectionId|category|statement SQL String|effective SQL string
 
18. category
 可以通过# filter what is logged
         filter=true   
         include     =
         exclude     =
         这三项的category设置来过滤(不)需要记录或信息
         error –P6Spy的出错信息
         info –包括启动及其他信息
         debug -调试信息,记录的信息非常多
         statement –包括 Statements, PreparedStatements, and CallableStatements.
         batch –包括 addBatch() JDBC API.
         commit -包括commit() JDBC API.
         rollback -包括rollback() JDBC API.
         result -包括由ResultSet生成的语句
19. statement SQL String
      传给statement的sql语句
20. effective SQL string
如果是程序使用的是prepared statement,可以查到带有实际运行时参数值的SQL语句。
21. connectionId
         连接ID
22. current time
         dateformat=yyyyMMdd:HHmmss:SSS
23. execution time
执行时间,以ms记
24. 举例
20060616 16:19:50:326|2|1|statement|select * from T_QUOTE_INFO  where 1=1    and POLICY_ID = 1446981
 
八、      查看LOG文件
Telnet客户端连接上服务器以后
tail -f spy.log
 
九、      怎样在LOG文件中找到自己的SQL
*         通过配置文件设置过滤器
*         重启WEBLOGIC
*         删除日志文件spy.log
*         TELNET终端
*         传入特殊的数值,然后再文件中查找此数值
        
十、      参考工具官方网站
2006-06-21[s00n]
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:85846次
    • 积分:1255
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:19篇
    • 译文:0篇
    • 评论:22条
    最新评论
    .Net
    游戏