Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
上正确但执行很差的 SQL。
请求不够具体,致使检索到的数据要比所需的数据多得多。 频繁地检索相同的冗余数据。 请求基数小,导致大量数据库请求为一个逻辑结构检索数据,而不是少数的请求有效地检索同一数据集(本人的数据库访问原则是宁可一个请求返回很多行和列,也不要多个请求检索较短、较窄的数据集)。这个模式经常用于嵌套类结构,试图应用正统的封装概念(规定每一个对象管理它自己的数据检索,而不可以委托给一个公用的统一的数据请求者)的开发人员也会使用到。 我当然不会违背每一个实例中的应用程序代码和设计,在本系列的第 3 部分中,我将展示监控数据库以进行性能统计的方法。但是基本上最有效的解决方案往往在客户机一边。因此,要监控 Java 应用程序中的数据库接口性能,最好的监控目标就是 JDBC。 我将展示如何使用类包装 的概念插装 JDBC 客户机。类包装背后的理念是:目标类可以包装在一层插装代码中,后者具有与被包装的类相同的外部行为。这些场景的难题就在于怎样可以在不改变依赖结构的情况下,无缝地引入被包装的类。 在这个例子中,我利用了 JDBC 首先是一个完全由接口定义的 API 这一事实:规范包括的具体类很少,而且 JDBC 的架构排除了直接紧密耦合到特定于数据库供应商提供的类的必要性。JDBC 的具体实现是被隐式加载的,而且源代码很少直接引用这些具体类。正因为如此,您可以定义一个全新的无实现的 JDBC 驱动程序,无需将所有针对它的调用全部委托给下面的 “真正的” 驱动程序,并在过程中收集性能数据。 我构建了一个名为 WrappingJDBCDriver 的实现,它足可以展示性能数据收集和支持前面的 Spring 例子 中的 EmployeeDAO 测试用例。图 9 展示了 WrappingJDBCDriver 的总体工作方式: 图 9. WrappingJDBCDriver 概览 载入 JDBC 驱动程序的标准过程需要两项:驱动程序的类名和连接的目标数据库的 JDBC URL。驱动程序的加载程序载入驱动程序类(可能是通过调用 Class.forName(jdbcDriverClassName))。大多数 JDBC 驱动程序会在类加载时用 JDBC java.sql.DriverManager 注册自己。然后驱动程序加载程序将 JDBC URL 传入 JDBC 驱动程序的一个实例中,以测试驱动程序是否接受该 URL。假定 URL 被接受,加载程序就能够对驱动程序调用 connect 并返回一个 java.sql.Connection。 包装的驱动程序的类名为 org.runtimemonitoring.jdbc.WrappingJDBCDriver。当被实例化时,它会从类路径中载入一个名为 wrapped-driver.xml 的配置文件。该文件包含插装配置项,配置项使用与目标驱动程序相关的形象化(figurative)名称索引: <Figurative Name>.driver.prefix:JDBC 驱动程序的真正的 JDBC URL 前缀 — 例如,jdbc.postgresql。 <Figurative Name>.driver.class:JDBC 驱动程序的类名 — 例如,org.postgresql.Driver。 <Figurative Name>.driver.class.path:一连串由逗号隔开的通往 JDBC 驱动程序位置的类路径入口。该项为可选项;如果不包括此项,WrappingJDBCDriver 会使用自己的类加载程序来定位驱动程序类。 <Figurative Name>.tracer.pattern.<Zero Based Index>:一连串的正则表达模式,用于为特定目标数据库提取跟踪类别。索引必须以 0 开始,由序列来定义跟踪类别的层次结构。 Java运行时监控,第2部分: 编译后插装和性能监控(14)时间:2011-02-13 IBM Nicholas WhiteheadWrappingJDBCDriver 的基本前提是配置 JDBC 客户机应用程序,让它使用 “被转换的(munged)” JDBC URL,其他任何的 JDBC 驱动程序(包括以插装为目标的)都无法识别这个 JDBC URL,因此除了 WrappingJDBCDriver 以外,不接受其他的 J |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |