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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:
一般来说,我们的JavaEE - JDBC企业应用程序的主要瓶颈之一就是在访问数据库,而数据库的瓶颈又主要在海量数据的查询上。如何解决这个问题?最简单的方法就是为数据库表建立精确的索引。
如何做到有效的建立索引?不妨利用P6Spy( http://www.p6spy.com/)及SQL Profiler( http://www.jahia.net/jahia/page597.html)软件包针对应用程序对数据的访问进行动态监测,通过利用P6Spy代理数据库驱动程序记录数据的访问、收集分析应用程序使用的SQL语句,找出性能瓶颈,生成优化方案报告及建立索引的SQL脚本。
获取 p6spy-install.jar ( http://www.p6spy.com) 
从 p6spy-install.jar 中得到p6spy.jar,这就是监测程序的软件包,将其加入您的用程序classpath中。 
将应用程序的数据库驱动改换成由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>
修改 spy.properties 文件,在其中配置你真正的数据库驱动程序(详细下面说)。 
通过以上的步骤,你就完成的P6Spy的配置,启动应用后,P6Spy就会对您的应用进行监测并产生相应的日志文件。
以下,我们将通过配置 SQL Profiler 对P6Spy的监测数据进行收集和分析:
获取 sqlprofiler-0.3-bin.zip( http://www.jahia.net/jahia/page597.html) 
替代上面的步骤 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的根下即可。 
在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
从sqlprofiler-0.3-bin.zip中获取 sqlprofiler.jar,这是一个图形界面的应用程序,它被用来接收监测数据(来自上面配置的P6Spy)和生成分析结果。 
至此,准备工作已经全部完成。执行分析的应用:
首先执行 sqlprofiler.jar(利用javaw),其在指定端口监听应用程序通过Log4j发来的监测数据。接下来就可以运行经过P6Spy代理的应用程序了。
在 SQL Profiler 的界面可以看到数据的采集。应用程序运行一段时间后(充分反映您应用程序的运行周期),点击“||”暂停按钮结束数据收集,接下来就是分析数据、生成解决方案、优化文件(索引脚本)。



     本文转自胡奇 51CTO博客,原文链接:http://blog.51cto.com/huqicto/280973,如需转载请自行联系原作者



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
318 64
|
30天前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
55 11
|
29天前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
106 7
|
2月前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!
|
3月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
2月前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
3月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
3月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
85 3
|
3月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
92 2
|
4月前
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
90 2