监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简介
http://www.ibm.com/developerworks/cn/java/j-lo-p6spy/
简介:?本文介绍如何在应用程序中利用 P6Spy、SQL Profiler、IronTrack SQL 工具来对数据库操作进行监控与剖析,从中发现应用系统存在的性能瓶颈,得到相关的优化建议并最终找到相应的解决办法。
<!-- <p height="20" alt="监控和剖析数据库操作 - P6Spy、SQL Profiler、IronTrack SQL 使用简介" title="点击评分 1 星" width="20">![]()
![]()
![]()
平均分 (共 4 个评分 ) <script type="text/javascript"></script><!-- Rating_Area_End -->
?
<!-- dW_Summary_Area_END --><!-- CONTENT_BODY -->
<!-- MAIN_COLUMN_BEGIN --><!-- Related_Searches_Area_And_Overlays_Begin --><!-- MAIN_COLUMN_CONTAINER_BEGIN -->配置项名称默认值配置项意义及相关注意事项module.logcom.p6spy.engine.logging. P6LogFactory用来拦截和记录任务应用程序的 JDBC 语句。若无配置或注释掉则无此功能。module.outagecom.p6spy.engine.outage. P6OutageFactory检测和记录执行时间比较长的 SQL 语句。若无配置或注释掉则无此功能。realdriver 真正的应用系统使用的数据库驱动程序名称。realdriver2 真正的应用系统使用的第二种备用数据库驱动程序名称。realdriver3 真正的应用系统使用的第三种备用数据库驱动程序名称。deregisterdriversfalse显示地把真正的数据库的驱动程序进行反注册掉。取值 true| falseexecutionthreshold P6Log 模块执行时间设置,整数值 (以毫秒为单位),只有当超过这个时间才进行记录 Log。outagedetectionfalseP6Outage 模块是否记录较长时间运行的语句。取值 true| falseoutagedetectioninterval P6Outage 模块执行时间设置,整数值 (以秒为单位)),只有当超过这个时间才进行记录 Log。filterfalse是否过滤 Log,取值 true| falseinclude 过滤 Log 时所包含的表名列表,以逗号分隔。exclude 过滤 Log 时所排除的表名列表,以逗号分隔。sqlexpression 过滤 Log 时的 SQL 表达式名称autoflushtrue是否自动刷新。取值 true| falsedateformat 设置时间的格式,也就是用 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.JakartaRegexMatcherstacktracefalse打印堆栈跟踪信息。取值 true| falsestacktraceclass 如果 stacktrace=true,则可以指定具体的类名来进行过滤。reloadpropertiesfalse监测属性配置文件是否进行重新加载。取值 true| falsereloadpropertiesinterval60属性配置文件重新加载的时间间隔,以秒为单位。useprefixfalse是否加上前缀,设置为 true,会加上 p6spy: 作为前缀。取值 true| falseappendercom.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.FileLoggerlogfilespy.log指定 Log 的文件名,任何适于操作系统的文件。appendtrue指定是否每次是增加 Log,设置为 false 则每次都会先进行清空。取值 true| falselog4j.appender.STDOUTorg.apache.log4j.ConsoleAppender当 appender 为 log4j 时采用的配置,配置如同 Log4J 的相关配置。log4j.appender.STDOUT.layoutorg.apache.log4j.PatternLayout同上log4j.appender.STDOUT. layout.ConversionPatternp6spy - %m%n同上log4j.logger.p6spyINFO,STDOUTLog 级别的设置,取值同 Log4J 的配置realdatasource 设置数据源 DataSource 的配置名称。realdatasourceclass 设置数据源 DataSource 的类的全称。realdatasourceproperties 设置数据源 DataSource 的属性,以分号分隔。jndicontextfactory 设置 JNDI 数据源的 NamingContextFactory。jndicontextproviderurl 设置 JNDI 数据源的提供者的 URL。jndicontextcustom 设置 JNDI 数据源的一些定制信息,以分号分隔。
接着,可以切换到 Loggers 视图,这是 Lgger 视图的信息:
图 3. SQL Profiler 的分析结果 Logger 视图

当然,也可以切换到 Analysis 视图,这是 Analysis 视图的分析结果信息:
图 4. SQL Profiler 的分析结果 Analysis 视图

在经过分析后,我们可以直接通过 SQLProfiler 提交的保存按钮,直接导出应当进行数据库优化的建议的索引脚本,通过查看索引脚本,我们可以看到创建索引的详细 SQL 脚本,这样,我们就可以非常方便地进行数据库调优了。
图 6. SQL Profiler 处于连接状态![]()
Count 列显示 SQL 语句的调用次数;Avg Time 列显示 SQL 语句的执行平均时间;Max Time 列显示 SQL 语句花费的最高时间;SQL 列显示真正执行的 SQL 语句内容。
同时也可以通过设置过滤条件来显示指定条件的结果,比如:只关注平均调用次数大于 100 次 的结果。点击“Filtering”左边的小三角图标,可以显示如下的过滤条件设置栏目:
图 9. IronTrack SQL 设置相关的过滤条件

设置完成后,点击“Apply Filter”按钮即可以获取所需要的相关结果了。这样可以更加方便地集中精力进行所需要的内容分析,可以更加方便快速地定位到问题的所在之处,然后进行解决。
俞黎敏(ID:YuLimin,网名:阿敏总司令),深入了解电力、电信行业的系统,并负责核心系统研发与管理工作。开源爱好者,曾经参与满江红开源组织 Spring 2.0 Reference 中文翻译的一审与二审工作和 Seam 1.2.1 Reference 中文翻译工作,《CSS: The Missing Manual》中文版译者,《Java Persistence with Hibernate》中文版译者,并担任 CSDN、CJSDN、Dev2Dev、Matrix、JavaWorldTW 等 Java 论坛版主,在各大技术社区推动开源和敏捷开发作出了积极的贡献,目前在组织 Seam 2.0 Reference 中文翻译工作,欢迎开源的爱好者们积极报名参与。博客:http://YuLimin.JavaEye.com。