`
huqi
  • 浏览: 93372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

提升基于JDBC的应用程序访问数据库的效率

阅读更多

一般来说,我们的JavaEE - JDBC企业应用程序的主要瓶颈之一就是在访问数据库,而数据库的瓶颈又主要在海量数据的查询上。如何解决这个问题?最简单的方法就是为数据库表建立精确的索引。

如何做到有效的建立索引?不妨利用P6Spy(http://www.p6spy.com/)及SQL Profiler(http://www.jahia.net/jahia/page597.html)软件包针对应用程序对数据的访问进行动态监测,通过利用P6Spy代理数据库驱动程序记录数据的访问、收集分析应用程序使用的SQL语句,找出性能瓶颈,生成优化方案报告及建立索引的SQL脚本。

  1. 获取 p6spy-install.jar (http://www.p6spy.com
  2. 从 p6spy-install.jar 中得到p6spy.jar,这就是监测程序的软件包,将其加入您的用程序classpath中。
  3. 将应用程序的数据库驱动改换成由P6Spy提供的代理驱动,在Spring中可以这样配置:
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      
    <!—这是你原来的数据库驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver -->
      
    <property name="driverClassName">
        
    <!--这是P6Spy的代理驱动-->
        
    <value>com.p6spy.engine.spy.P6SpyDriver</value>
      
    </property>
      
    <property name="url">
        
    <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=sample</value>
      
    </property>
      
    <property name="username"><value>sa</value></property>
      
    <property name="password"><value>sa</value></property>
    </bean>
  4. 修改 spy.properties 文件,在其中配置你真正的数据库驱动程序(详细下面说)。

通过以上的步骤,你就完成的P6Spy的配置,启动应用后,P6Spy就会对您的应用进行监测并产生相应的日志文件。

以下,我们将通过配置 SQL Profiler 对P6Spy的监测数据进行收集和分析: 

  1. 获取 sqlprofiler-0.3-bin.zip(http://www.jahia.net/jahia/page597.html
  2. 替代上面的步骤 4,从sqlprofiler-0.3-bin.zip中获取 spy.properties 配置文件,这就是P6Spy监测程序的配置文件,我们需要在这个文件中为代理配置真正的数据库驱动程序:
    # oracle driver
    # realdriver
    =oracle.jdbc.driver.OracleDriver

    # mysql Connector/J driver
    # realdriver
    =com.mysql.jdbc.Driver

    # informix driver
    # realdriver
    =com.informix.jdbc.IfxDriver

    # ibm db2 driver
    # realdriver
    =COM.ibm.db2.jdbc.net.DB2Driver

    # the mssqlserver driver
    realdriver
    =com.microsoft.jdbc.sqlserver.SQLServerDriver

    #specifies another driver to use
    realdriver2
    =
    #specifies a third driver to use
    realdriver3
    =
    最后,将这个文件放置在你应用程序classpath的根下即可。
  3. 在spy.properties中,我们还需要配置更多的信息以收集数据,可以利用Log4j向网络上输出性能监测数据,这样Sql Profiler软件包就能收到数据并进行分析,当然,您要在配置文件中指定接收数据的网络监听地址和端口。
    #specifies the appender to use for logging
    appender
    =com.p6spy.engine.logging.appender.Log4jLogger
    #appender
    =com.p6spy.engine.logging.appender.StdoutLogger
    #appender
    =com.p6spy.engine.logging.appender.FileLogger
    # name of logfile to use
    , note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log) (used for file logger only)
    #logfile     
    = spy.log

    # append to  the p6spy log file.  if this is set to false the
    # log file is truncated every time.  (file logger only)
    append
    =true

    #The following are for log4j logging only
    #log4j.appender.STDOUT
    =org.apache.log4j.ConsoleAppender
    #log4j.appender.STDOUT.layout
    =org.apache.log4j.PatternLayout
    #log4j.appender.STDOUT.layout.ConversionPattern
    =p6spy - %m%n

    log4j.appender.SQLPROFILER_CLIENT
    =org.apache.log4j.net.SocketAppender
    log4j.appender.SQLPROFILER_CLIENT.RemoteHost
    =localhost
    log4j.appender.SQLPROFILER_CLIENT.Port
    =4445
    log4j.appender.SQLPROFILER_CLIENT.LocationInfo
    =true

    #log4j.logger.p6spy
    =INFO,STDOUT
    log4j.logger.p6spy
    =DEBUG, SQLPROFILER_CLIENT
  4. 从sqlprofiler-0.3-bin.zip中获取 sqlprofiler.jar,这是一个图形界面的应用程序,它被用来接收监测数据(来自上面配置的P6Spy)和生成分析结果。

至此,准备工作已经全部完成。执行分析的应用:

首先执行 sqlprofiler.jar(利用javaw),其在指定端口监听应用程序通过Log4j发来的监测数据。接下来就可以运行经过P6Spy代理的应用程序了。

在 SQL Profiler 的界面可以看到数据的采集。应用程序运行一段时间后(充分反映您应用程序的运行周期),点击“||”暂停按钮结束数据收集,接下来就是分析数据、生成解决方案、优化文件(索引脚本)。

分享到:
评论

相关推荐

    JSP+SQL房屋租赁管理信息系统JDBC(源代码+论文+答辩PPT).rar

    该资料包包含了必要的源代码,允许用户快速搭建和部署一个基于Web的应用程序,通过该程序可以有效地进行房屋信息的录入、查询、更新和删除操作。此系统设计的初衷是为了简化和自动化房屋租凭行业的管理工作,通过...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    所有的配置工作都集中在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 第四章 系统设计 4.1开发框架技术介绍 对于框架技术,我们采用Struts+ajax的整合! Struts是应用...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库应用。全书分5篇24章,共计603个实例和603个经验技巧。每个实例都...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

    二十三种设计模式【PDF版】

    可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和...

    整理后java开发全套达内学习笔记(含练习)

    应用,应用程序 [,æpli'keiʃәn]' (application crash 程序崩溃) arbitrary a.任意的 ['ɑ:bitrәri] argument n.参数;争论,论据 ['ɑ:gjumәnt]'(缩写 args) assert (关键字) 断言 [ә'sә:t] ' (java 1.4 之后...

    hibernate 框架详解

    应用程序级别的版本检查(Application version checking) 12.3.2. 长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 12.3.4. 定制自动版本化行为 12.4. 悲观锁定(Pessimistic ...

    最全Hibernate 参考文档

    3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 为...

    Hibernate3+中文参考文档

    11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 长生命周期session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 11.3.4. 定制自动版本化行为 11.4. 悲观锁定(Pessimistic ...

    hibernate3.04中文文档.chm

    12.3.1. 应用程序级别的版本检查(Application version checking) 12.3.2. 长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 12.3.4. 定制自动版本化行为 12.4. 悲观锁定...

    PL/SQL 基础.doc

    缺点 1) 不便于向异构数据库移植应用程序(只能用于Oracle); 5. SQL与PL/SQL的区别 SQL:1) 第四代语言(智能语言); 2) 做什么,不管怎么做; 3) 缺少过程与控制语句; 4) 无算法 PL/SQL: (相对SQL扩展部分)...

    Hibernate教程

    12.3.1. 应用程序级别的版本检查(Application version checking) 12.3.2. 长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 12.3.4. 定制自动版本化行为 12.4. 悲观锁定...

    hibernate 教程

    应用程序自己进行版本检查 10.5. 会话断开连接(Session disconnection) 10.6. 悲观锁定(Pessimistic Locking) 11. Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity...

    hibernate

    应用程序自己进行版本检查 10.5. 会话断开连接(Session disconnection) 10.6. 悲观锁定(Pessimistic Locking) 11. Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity...

Global site tag (gtag.js) - Google Analytics