`
wls981
  • 浏览: 137853 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

通过p6spy查看sql的真正执行状态

 
阅读更多

做开发的时候,jdbc中通过都是一堆问号,所以查看的时候要看到真正的值很不方便,可以通过 p6spy 这个工具jar包来查看。

 

下面的内容引述自:http://www.ibm.com/developerworks/cn/java/j-lo-p6spy/index.html

 

 

 

P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。

自从 2003 年 11 月 30 日 P6Spy 版本 1.3 发布后,已经被下载超过 19,000 次了。P6Spy 支持 WebSphere、WebLogic、JBoss、Resin 和 Tomcat 等绝大多数的应用服务器。

使用步骤

首先,你的应用系统应当是基于数据库的,然后你需要去获取 P6Spy 相关的文件(在 参考资源 中可以找到下载链接,您可以直接下载软件包)。下面介绍 P6Spy 的安装与使用的详细操作过程:

  1. 下载 P6Spy 的文件包,也可以下载它的源文件包来研究;
  2. 把 P6Spy 的 jar 包 p6spy.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;
  3. 把 spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序放在 YourWebApp/WEB-INF/classess/ 目录下,注意不是lib/ 目录
  4. 修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时先都不用修改;
  5. 打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;
  6. 运行你的应用程序或 Web 应用程序,可以在 spy.log 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。

P6Log 与 P6Outage

在 P6Spy 发布包中,它包含 P6Log 和 P6Outage 两个模块:

  1. P6Log

    P6Log 是用来拦截和记录任务应用程序的 JDBC 语句的。这个功能对于开发者监控 EJB 服务器上的 SQL 语句执行情况尤其有用,可以让开发者完成尽可能高效的代码。同时 P6Spy 的部署是极其简单的,而且根本不需要更改任何一行代码,即对现有的应用是无侵入性的。

    realdriver= (your driver)       (你的实际 JDBC 驱动程序名称)
    executionthreshold=整数时间     (以毫秒为单位)
    
  2. P6Outage

    P6Outage 专门用来检测和记录执行时间比较长的 SQL 语句,P6Outage 只记录超过配置条件里时间的那些信息,并对可能影响到数据库的运行效率减小到最低。

    #outagedetection=true|false    (是否记录较长时间运行的语句)
    #outagedetectioninterval=整数时间 (以秒为单位)
    

架构原理

简单地讲,我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。而相对于这一点点的性能下降,在开发环境中对于开发人员来说是无法感觉到,相比它所带来的好处,完全可以忽略不计。


图 1. P6Spy 对数据库进行拦截监控的处理过程
图 1. P6Spy 对数据库进行拦截监控的处理过程 

问题与解决

如果在你的应用程序启动后,却在 spy.log 文件中发现了如下的提示信息,那就是驱动程序加载先后的问题了。

<你的程序的数据库驱动名称> is a real driver in spy.properties, but it has 
been loaded before p6spy.  p6spy will not wrap these connections.  Either 
prevent the driver from loading, or try setting'deregisterdrivers' to true in 
spy.properties

 

请把 spy.properties 配置文件里的 deregisterdrivers=false 改为 deregisterdrivers=true,重新运行即可。

这是因为有些应用系统中会先于 P6Spy 加载了真正的数据库的驱动程序,导致 P6Spy 无法监控到,设置 deregisterdrivers 为true,是显式地把真正的数据库的驱动程序进行反注册掉,而采用 P6Spy 的驱动程序。

配置参数及相关意义

下表列出了 spy.properties 配置文件中的各配置项的名称、默认值及其意义和相关注意事项:

配置项名称 默认值 配置项意义及相关注意事项
module.log com.p6spy.engine.logging. P6LogFactory 用来拦截和记录任务应用程序的 JDBC 语句。若无配置或注释掉则无此功能。
module.outage com.p6spy.engine.outage. P6OutageFactory 检测和记录执行时间比较长的 SQL 语句。若无配置或注释掉则无此功能。
realdriver   真正的应用系统使用的数据库驱动程序名称。
realdriver2   真正的应用系统使用的第二种备用数据库驱动程序名称。
realdriver3   真正的应用系统使用的第三种备用数据库驱动程序名称。
deregisterdrivers false 显示地把真正的数据库的驱动程序进行反注册掉。取值 true| false
executionthreshold   P6Log 模块执行时间设置,整数值 (以毫秒为单位),只有当超过这个时间才进行记录 Log。
outagedetection false P6Outage 模块是否记录较长时间运行的语句。取值 true| false
outagedetectioninterval   P6Outage 模块执行时间设置,整数值 (以秒为单位)),只有当超过这个时间才进行记录 Log。
filter false 是否过滤 Log,取值 true| false
include   过滤 Log 时所包含的表名列表,以逗号分隔。
exclude   过滤 Log 时所排除的表名列表,以逗号分隔。
sqlexpression   过滤 Log 时的 SQL 表达式名称
autoflush true 是否自动刷新。取值 true| false
dateformat   设置时间的格式,也就是用 Java 的 SimpleDateFormat 程序。
includecategories   显示指定过滤 Log 时包含的分类列表,取值为 error,info,batch,debug,statement,commit,rollback,result 的各种组合。
excludecategories   显示指定过滤 Log 时排队的分类列表,取值同上。
stringmatcher   使用正则表达式来过滤 Log,取值为 com.p6spy.engine.common.GnuRegexMatcher 和 com.p6spy.engine.common.JakartaRegexMatcher
stacktrace false 打印堆栈跟踪信息。取值 true| false
stacktraceclass   如果 stacktrace=true,则可以指定具体的类名来进行过滤。
reloadproperties false 监测属性配置文件是否进行重新加载。取值 true| false
reloadpropertiesinterval 60 属性配置文件重新加载的时间间隔,以秒为单位。
useprefix false 是否加上前缀,设置为 true,会加上 p6spy: 作为前缀。取值 true| false
appender com.p6spy.engine.logging. appender.FileLogger 指定 Log 的 appender,与 Log4J 有点同义,取值:com.p6spy.engine.logging.appender.Log4jLogger、com.p6spy.engine.logging.appender.StdoutLogger 和 com.p6spy.engine.logging.appender.FileLogger
logfile spy.log 指定 Log 的文件名,任何适于操作系统的文件。
append true 指定是否每次是增加 Log,设置为 false 则每次都会先进行清空。取值 true| false
log4j.appender.STDOUT org.apache.log4j.ConsoleAppender 当 appender 为 log4j 时采用的配置,配置如同 Log4J 的相关配置。
log4j.appender.STDOUT.layout org.apache.log4j.PatternLayout 同上
log4j.appender.STDOUT. layout.ConversionPattern p6spy - %m%n 同上
log4j.logger.p6spy INFO,STDOUT Log 级别的设置,取值同 Log4J 的配置
realdatasource   设置数据源 DataSource 的配置名称。
realdatasourceclass   设置数据源 DataSource 的类的全称。
realdatasourceproperties   设置数据源 DataSource 的属性,以分号分隔。
jndicontextfactory   设置 JNDI 数据源的 NamingContextFactory。
jndicontextproviderurl   设置 JNDI 数据源的提供者的 URL。
jndicontextcustom   设置 JNDI 数据源的一些定制信息,以分号分隔。
分享到:
评论

相关推荐

    p6spy-sql监控

    3. **性能分析**:通过记录SQL执行时间,P6Spy可以帮助识别性能瓶颈,找出执行慢的SQL语句。 4. **匿名化处理**:对于敏感数据,P6Spy可以提供数据脱敏功能,确保在日志中不会泄露真实的用户信息。 5. **兼容性...

    借鉴p6spy,实现自己的SQL执行监控器项目源代码

    这个项目的目标是借鉴P6Spy的部分源码,创建一个自定义的SQL执行监控器,以满足特定的需求或提供更定制化的功能。 P6Spy的工作原理是通过代理JDBC驱动,拦截所有的SQL语句,然后在执行前后添加额外的操作,如日志...

    P6SPY JDBC拦截打印sql语句 非常好的调试工具

    P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...

    P6spy 和 SqlProfiler 打印JDBC真实SQL

    使用P6Spy,开发者可以获取到SQL执行时间、事务处理细节等重要信息,这对于性能优化和调试非常有帮助。P6Spy的安装通常涉及到配置数据库驱动类路径,设置代理驱动,以及配置spys.properties文件来定制日志格式和内容...

    采用p6spy完整显示hibernate的SQL语句

    P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...

    Tomcat6.x + P6spy + SqlProfiler集成

    与P6spy不同,SqlProfiler通常需要与数据库管理系统的客户端一起使用,它可以实时监控SQL执行,包括查询时间、CPU使用、锁定和等待事件等。通过这种方式,开发者可以直观地看到哪些SQL语句可能导致性能问题。 **...

    使用P6spy打印ibatis执行的SQL语句

    - **理解执行计划**:虽然P6Spy不直接提供执行计划,但可以通过SQL语句分析其可能的执行路径。 - **检查参数绑定**:看到SQL语句中的占位符被实际值替换的过程,有助于排查因参数传递错误导致的问题。 - **对比不同...

    weblogic server 11g +p6spy +sql profiler 配置

    P6Spy则是一个开源的数据库监控工具,它能够帮助开发者和管理员追踪和分析SQL执行情况,提高数据库性能。SQL Profiler是P6Spy的一个组件,用于对数据库操作进行详细分析,找出潜在的性能瓶颈。 配置WebLogic Server...

    p6spy 在weblogic中的配置 以及使用sqlprofiler监控

    通过在WebLogic中配置P6Spy并使用SQLProfiler,我们可以获取详细的SQL执行信息,从而优化数据库性能。这个过程涉及到对WebLogic数据源的配置、P6Spy代理驱动的使用以及`spy.properties`的定制。理解这些知识点对于...

    p6spy使用说明.doc

    P6Spy产生的日志文件包含了详细的SQL执行信息,包括执行时间、参数等,这对于性能分析和优化非常有帮助。日志格式通常包括模块信息、时间戳、SQL语句以及执行时长等,可以通过调整配置参数来控制日志的详细程度和...

    p6spy_sqlprofiler-0.3-bin.zip

    报告中可能会包括SQL执行时间的直方图、平均执行时间、最耗时的SQL语句等,这些信息对于定位和解决性能问题至关重要。 总结来说,P6Spy和SQLProfiler是数据库管理员和开发者的有力工具,它们可以帮助我们无侵入地...

    下载 p6spy.jar (内含使用步骤)

    1. **查看日志**:P6Spy 会在指定的`logFile`中记录SQL日志,通过阅读这些日志,你可以看到应用程序的每个SQL语句及其执行细节。 2. **性能分析**:根据日志中的执行时间,你可以识别出哪些SQL语句运行较慢,然后...

    p6spy_sqlprofiler

    专门用来监控hibernate的sql输出,进行调试应用程序的工具,找了好久才找到,里面有个配置文件,记住realdriver是你的驱动,而在hibernate设置的驱动是这个驱动代理,p6spy的驱动,相当于在hibernate和数据库之间放...

    p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用

    p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用

    p6spy精简版-跟踪sql工具

    4. **查看日志**:p6spy将SQL信息写入日志,可以通过查看这些日志来分析SQL执行效率,找出可能的性能瓶颈。 压缩包中的"p6spy-syj"可能是一个包含了精简版p6spy的源码和说明文档的文件。源码可以用于学习和二次开发...

    p6spy java 使用

    2. 问题排查:当遇到数据库相关的问题时,查看 P6Spy 的日志可以帮助定位问题所在,因为它们提供了完整的 SQL 语句及其执行上下文。 3. 数据安全:通过排除 ResultSet,可以避免敏感数据出现在日志中,保护用户隐私...

    使用P6Spy和IronTrack SQL进行性能监控

    在实际应用中,我们可以先用P6Spy收集基础的SQL执行数据,然后通过IronTrack SQL进行深入分析,找出性能问题并采取相应的优化措施。例如,如果发现某个SQL查询执行时间过长,可以进一步查看它的执行计划,检查是否...

    监控和剖析数据库 P6Spy、SQL Profiler、IronTrack SQL

    IronTrack SQL能够记录SQL执行的详细信息,包括执行计划、资源消耗等,并通过可视化的方式展示出来,方便用户识别和解决性能问题。配置IronTrack SQL通常需要安装代理程序,设置数据库连接参数,并在管理控制台上...

    sqlprofiler+p6spy+配制

    `SQL Profiler`和`P6Spy`就是两个用于此目的的工具。它们可以帮助开发者识别性能瓶颈,理解数据库操作的效率,并进行必要的优化。现在我们来详细探讨这两个工具的配置及其相关知识。 首先,`SQL Profiler`是微软SQL...

    p6spy.rar输出完整带参sql

    - **性能调优**:通过记录和分析SQL执行时间,可以找出性能低下或资源消耗大的SQL语句。 - **开发测试**:在开发阶段,P6Spy可以作为SQL日志工具,帮助开发者验证SQL语句的正确性和效率。 8. **与其他监控工具...

Global site tag (gtag.js) - Google Analytics