做开发的时候,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 的安装与使用的详细操作过程:
- 下载 P6Spy 的文件包,也可以下载它的源文件包来研究;
- 把 P6Spy 的 jar 包 p6spy.jar 放到
CLASSPATH
中,如果是 Web 应用程序则放在YourWebApp/WEB-INF/lib/
目录下; - 把 spy.properties 放到
CLASSPATH
目录下,如果是 Web 应用程序放在YourWebApp/WEB-INF/classess/
目录下,注意不是lib/
目录 - 修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称
com.p6spy.engine.spy.P6SpyDriver
其它的全部使用默认值,暂时先都不用修改; - 打开配置文件 spy.properties 文件,找到
realdriver
,把它的值改为你的应用系统的真正的数据库驱动名称; - 运行你的应用程序或 Web 应用程序,可以在 spy.log 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。
在 P6Spy 发布包中,它包含 P6Log 和 P6Outage 两个模块:
-
P6Log
P6Log 是用来拦截和记录任务应用程序的 JDBC 语句的。这个功能对于开发者监控 EJB 服务器上的 SQL 语句执行情况尤其有用,可以让开发者完成尽可能高效的代码。同时 P6Spy 的部署是极其简单的,而且根本不需要更改任何一行代码,即对现有的应用是无侵入性的。
realdriver= (your driver) (你的实际 JDBC 驱动程序名称) executionthreshold=整数时间 (以毫秒为单位)
-
P6Outage
P6Outage 专门用来检测和记录执行时间比较长的 SQL 语句,P6Outage 只记录超过配置条件里时间的那些信息,并对可能影响到数据库的运行效率减小到最低。
#outagedetection=true|false (是否记录较长时间运行的语句) #outagedetectioninterval=整数时间 (以秒为单位)
简单地讲,我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 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 数据源的一些定制信息,以分号分隔。 |
相关推荐
3. **性能分析**:通过记录SQL执行时间,P6Spy可以帮助识别性能瓶颈,找出执行慢的SQL语句。 4. **匿名化处理**:对于敏感数据,P6Spy可以提供数据脱敏功能,确保在日志中不会泄露真实的用户信息。 5. **兼容性...
这个项目的目标是借鉴P6Spy的部分源码,创建一个自定义的SQL执行监控器,以满足特定的需求或提供更定制化的功能。 P6Spy的工作原理是通过代理JDBC驱动,拦截所有的SQL语句,然后在执行前后添加额外的操作,如日志...
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...
使用P6Spy,开发者可以获取到SQL执行时间、事务处理细节等重要信息,这对于性能优化和调试非常有帮助。P6Spy的安装通常涉及到配置数据库驱动类路径,设置代理驱动,以及配置spys.properties文件来定制日志格式和内容...
P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...
与P6spy不同,SqlProfiler通常需要与数据库管理系统的客户端一起使用,它可以实时监控SQL执行,包括查询时间、CPU使用、锁定和等待事件等。通过这种方式,开发者可以直观地看到哪些SQL语句可能导致性能问题。 **...
- **理解执行计划**:虽然P6Spy不直接提供执行计划,但可以通过SQL语句分析其可能的执行路径。 - **检查参数绑定**:看到SQL语句中的占位符被实际值替换的过程,有助于排查因参数传递错误导致的问题。 - **对比不同...
P6Spy则是一个开源的数据库监控工具,它能够帮助开发者和管理员追踪和分析SQL执行情况,提高数据库性能。SQL Profiler是P6Spy的一个组件,用于对数据库操作进行详细分析,找出潜在的性能瓶颈。 配置WebLogic Server...
通过在WebLogic中配置P6Spy并使用SQLProfiler,我们可以获取详细的SQL执行信息,从而优化数据库性能。这个过程涉及到对WebLogic数据源的配置、P6Spy代理驱动的使用以及`spy.properties`的定制。理解这些知识点对于...
P6Spy产生的日志文件包含了详细的SQL执行信息,包括执行时间、参数等,这对于性能分析和优化非常有帮助。日志格式通常包括模块信息、时间戳、SQL语句以及执行时长等,可以通过调整配置参数来控制日志的详细程度和...
报告中可能会包括SQL执行时间的直方图、平均执行时间、最耗时的SQL语句等,这些信息对于定位和解决性能问题至关重要。 总结来说,P6Spy和SQLProfiler是数据库管理员和开发者的有力工具,它们可以帮助我们无侵入地...
1. **查看日志**:P6Spy 会在指定的`logFile`中记录SQL日志,通过阅读这些日志,你可以看到应用程序的每个SQL语句及其执行细节。 2. **性能分析**:根据日志中的执行时间,你可以识别出哪些SQL语句运行较慢,然后...
专门用来监控hibernate的sql输出,进行调试应用程序的工具,找了好久才找到,里面有个配置文件,记住realdriver是你的驱动,而在hibernate设置的驱动是这个驱动代理,p6spy的驱动,相当于在hibernate和数据库之间放...
p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用
4. **查看日志**:p6spy将SQL信息写入日志,可以通过查看这些日志来分析SQL执行效率,找出可能的性能瓶颈。 压缩包中的"p6spy-syj"可能是一个包含了精简版p6spy的源码和说明文档的文件。源码可以用于学习和二次开发...
2. 问题排查:当遇到数据库相关的问题时,查看 P6Spy 的日志可以帮助定位问题所在,因为它们提供了完整的 SQL 语句及其执行上下文。 3. 数据安全:通过排除 ResultSet,可以避免敏感数据出现在日志中,保护用户隐私...
在实际应用中,我们可以先用P6Spy收集基础的SQL执行数据,然后通过IronTrack SQL进行深入分析,找出性能问题并采取相应的优化措施。例如,如果发现某个SQL查询执行时间过长,可以进一步查看它的执行计划,检查是否...
IronTrack SQL能够记录SQL执行的详细信息,包括执行计划、资源消耗等,并通过可视化的方式展示出来,方便用户识别和解决性能问题。配置IronTrack SQL通常需要安装代理程序,设置数据库连接参数,并在管理控制台上...
`SQL Profiler`和`P6Spy`就是两个用于此目的的工具。它们可以帮助开发者识别性能瓶颈,理解数据库操作的效率,并进行必要的优化。现在我们来详细探讨这两个工具的配置及其相关知识。 首先,`SQL Profiler`是微软SQL...
- **性能调优**:通过记录和分析SQL执行时间,可以找出性能低下或资源消耗大的SQL语句。 - **开发测试**:在开发阶段,P6Spy可以作为SQL日志工具,帮助开发者验证SQL语句的正确性和效率。 8. **与其他监控工具...