为最佳性能而进行优化

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

微调数据库访问会使应用程序和数据库保持协调一致。

如果您在开发 Web 应用程序,那么您很可能熟悉基于Java连接到数据库的方法:JDBC 和 SQLJ。但是您知道如何能让使用这些方法的应用程序获得最佳性能吗?

如果您认为性能不是开发人员所关心的问题,那么请您再想想,有的系统执行效率一般,有的系统执行效率很棒,造成这一区别的原因是什么呢?我认为这主要在于数据库架构设计师、数据库管理员和应用程序开发人员的技能和经验。

尽管数据库优化应该从最初的设计阶段开始,但是也可以在生产环境中对早已建立的数据库和相关的应用程序进行微调。提高性能并不仅仅包括在数据库中创建索引和规范化,虽然这些也是必须要做的工作,但是仅有此还不够。访问数据库的应用程序设计(及其访问数据库的方式)对获得最佳性能也是至关重要的。

为帮助您提高应用程序性能,针对通过 JDBC(或使用 JDBC 的 IBM WebSphere Application Server)和 SQLJ 来进行数据库存取的应用程序,这里提供了一些优化方面的技巧。

优化 JDBC

几乎所有的企业级 Web 应用程序中都使用三层设计:表示层、应用层和数据层,在这种模型中,基于 Java 的应用程序连接到数据库所采用的标准之一就是 JDBC。

要优化使用 JDBC 接口的数据库访问,请遵循这些准则:

尽量避免使用元数据方法。虽然不能完全避免使用元数据(描述其他数据和引用的数据)方法,但是请尽可能少使用它们。由于它们是添加的抽象层,因而访问它们相对较慢。

避免使用 GETCOLUMNS不要使用 GETCOLUMNS 命令查找表的详细信息,请尝试用 GETMETADATA 命令进行“哑”查询。

避免使用地毯式搜索。在 JDBC 查询中使用数据库命令 LIKEAS 会降低性能,查询大型表时尤其如此。查询中使用空的自变量也会降低性能。请尽可能地消除这些语句。

减少要检索的数据量。仅查询您需要的数据,不要超出此范围。除非绝对必需,否则不要检索很长的数据列表。最好设计一个终端程序,可以一次发送几组数据,就像 Yahoo! 和 Google 这样高度优化的搜索引擎一样。除非使用 SELECT * FROM <TABLE NAME> 是必需的,否则请不要使用此方式。

减少要返回的数据量。通过 SETMAXROWSSETMAXFIELDSIZE 设置查询的界限,将界限与所需的最大数据相匹配,这样会有助于提高性能。例如,搜索引擎不需要返回一次查询中所有 600,000 个匹配。相反,它可以设置合理的界限,使之能满足 99% 的用户,而对于剩下的 1% 的用户,则需要再做一次额外的调用。这种方法要花费更多的时间去构建,并且要很好地了解用户的需求和行为。但是,在非常敏感的企业数据库系统中,像这样做来提高性能是很值得的。

选择合适的数据类型。如果数据库设计经常更改,这种方法可能会引起太多开销。但通常情况下,在建表时选择保存数据所需的最小存储长度的数据类型是一个非常好的方法。例如,当需要整数时,使用整数类型而不是实数或浮点数(后两者需要花费更多的时间来处理)。

使用参数来调用自变量。这一规则在任何应用程序中都是最佳编码方式。固化自变量不灵活,经常导致以后的维护问题。同时,因为在调用存储过程时所有的参数都会作为字符串送往数据库,使用固定值的参数还会降低数据库性能。在远程过程调用(RPC)过程中使用变参效果会更好。

为作业选择正确的游标。弄清楚表所需的游标类型,使用其中能提供最高性能的游标。对于只需顺序读的情况,应选择正向游标。对于需要查询的数据量比较小的应用程序,最好使用Insensitive 游标,该游标会创建数据集的临时拷贝,然后可以在该数据拷贝中遍历,这种游标在 Web 应用程序中尤其常见。Sensitive 游标只用于大的数据集和动态的数据检索,因为它们通常是性能中开销最大的。

管理连接。虽然像 WebSphere 这样的应用服务器能处理大量的会话管理,但还是应该注意一些优化技巧。例如,一次只连接到一个数据源。避免执行 SQL 调用时需要对数据库进行连接和断开连接所带来的高开销。并且尽量共用连接以获得更佳的性能。DB2 通用数据库(UDB)V8.1 还提供了新的连接的集中和简化机制,通过有效自动地管理数据库连接来提高应用程序的性能。

关闭 AUTOCOMMIT这是优化数据库中最重要的规则。您甚至不必去考虑它,只需设置 WSCONNECTION.SETAUTOCOMMIT(FALSE)即可。

尽可能地使用本地事务。分布式事务会比较慢。

使用 UPDATEXXX 命令取代一般的 update 命令。这个方法对于常要更改数据库设计的系统来说是不适用的。但在设计相对静态的系统中,UPDATEXXX 命令会提高性能,因为具有针对性的命令总是比通用的命令快。

即使对于最复杂的、使用 JDBC 的 Web 应用程序,以上建议仍能使之获得很好的性能。

优化 WebSphere

因为 WebSphere 符合J2EE规范,它的许多连接使用了 JDBC,所以用于 JDBC 的这些优化建议同样适用于它。但是,使用 WebSphere 时,还需知道两个重要的优化技巧:

  • 使用 GETBESTROWIDENTIFIER()使用这个命令来获取最优的列集合,它将减少处理时间。使用 GETPRIMARYKEYS()GETINDEXINFO() 来用格式化 WHERE 子句,这将有助于使开销降到最少。

  • 使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

优化 SQLJ

SQLJ 可以替代 JDBC,它有特定的优势。同样达到最优的性能时,SQLJ 的效率比 JDBC要高好。但是,SQLJ 的灵活性不及 JDBC,因为它使用了更多固定的静态值,而没有提供变量的替换方法。这两个数据库访问方法之间的区别,类似于使用编译型程序(SQLJ)和使用解释型程序(JDBC)之间的区别(前者在运行时之前就执行了一些处理,后者在运行时编译并执行)。

SQLJ 是一种高级语言,它涵盖了 JDBC 的功能,但是它需要非常严格的、特定的函数以确保达到最高性能。和 JDBC 一样,SQLJ 是 Java 程序的标准之一,它保持了 Java 的平台独立性。但是,SQLJ 不符合 J2EE,因此,在所有应用程序服务器中都不支持它。

在许多方法中,需要最高性能的企业级 Web 应用程序要高效地与 DB2 相连,SQLJ 就是关键因素之一。其它数据库在这一级别不支持 SQLJ,因此它通常使 DB2 的工作性能比其竞争对手要好。支持 Web 的 DB2 要想避免性能损失可能很困难,对于事务处理系统来说尤其如此。但是,在真正的静态实现中,SQLJ 和 DB2 具有的性能优势超过其它数据库。

以下准则将有助您利用这个前沿技术:

显式地关闭和释放资源。如果连接到数据库的应用程序需要长期运行,最重要的规则之一是在正确的时机清除活动会话。切记,任何人都不期望经常重新引导系统。

完成后关闭结果集。通常会遗漏这个步骤,但是如果您没有执行这一步骤,则 Java 虚拟机(JVM)垃圾收集机制就不能回收对象。最后应用程序可能耗尽 JDBC 资源,甚至可能耗尽内存。

只更新和访问需要的字段。再一次重申,应该只访问需要的数据,不要超出此范围。

定制 SQLJ profiler和请求联机检查。该步骤防止 SQLJ 动态地访问数据,从而降低性能。这条规则将确保 SQLJ 静态地运行。

调优 JVM 堆的大小。1MB 的缺省堆往往不够大,会影响性能。增大堆的大小以满足应用程序的需要。但是要注意:将堆的大小设置成最大会降低垃圾收集的频率,其结果反而会影响性能。

使版本保持最新。尽量使用新的版本。虽然移植要花费一些精力,但通常值得我们这样做。SQLJ 和 JDBC 都是比较新的标准,每个新的版本都会有比较显著的性能提高。

打开高速缓存。该规则帮助您避免准备动态 SQL 所要的开销。设置 CACHEDYN=YES 将有助于提高 SQLJ 代码的性能。

通过微调 SQLJ,使 Web 应用程序访问数据库的性能能够赶上甚至超越使用 JDBC 时的性能。

选择自己的途径

优化数据库有许多可能的途径。不要期望一次就应用所有的方法。如果您一次只从一个途径着手,就应该可以得到性能的提高。通过准备工作和适当的计划,即使是最复杂的数据库应用也能达到最优的性能。别忘了,千里之行始于足下。

Win11性能优化:如何调整至最佳性能模式 通过调整Windows 11的性能模式至最佳性能,您可以显著提升计算机的响应速度和运行效率。本文详细介绍了如何进入系统设置、找到高级系统设置、选择性能选项并调整至最佳性能模式的方法。同时,还提供了其他性能优化建议,帮助您充分利用系统资源,获得最佳的使用体验。希望本文对您有所帮助! 阅读详情

相关推荐

性能优化中的工程化实践:从 Vite 到 Webpack 的最佳配置方案

在现代前端开发中,构建工具是优化开发效率和生产性能的核心。Webpack 凭借其强大的功能和成熟的生态系统长期占据主导地位,而 Vite 则以其极快的开发体验和简洁的配置迅速崛起。本文对比了 Vite 和 Webpack 在打包性能、体积优化和插件机制上的差异,深入讲解如何通过最佳配置实现生产级性能优化。内容涵盖构建性能对比、Tree Shaking 配置陷阱、动态导入与预构建优化、Webpack 的 splitChunks 配置、Vite 的 Rollup 插件体系与缓存设计,以及 CI/CD 中的性能

zimin的专栏 1546

(转)DB2JDBC 数据库连接- -JDBC 驱动程序揭密

 DB2JDBC 数据库连接- -                                        JDBC 驱动程序揭密对 Java 产生混淆的常见根源是:JDBC 有不同的版本,JDBC 驱动程序有不同的类型,它们可以被不同版本的 Java 使用。而且,新的 Java 规范总是在开发之中,因为通过 Java 社区过程(Java Community Pro

马岩的博客 1412

前端 React.js 性能优化最佳时间点

在前端开发领域,React.js 作为一款广受欢迎的 JavaScript 库,被广泛应用于构建用户界面。然而,随着应用规模的不断扩大和复杂度的增加,React.js 应用的性能问题逐渐凸显。本文章的目的在于探讨前端 React.js 性能优化最佳时间点,帮助开发者在合适的阶段采取有效的优化措施,提升应用的响应速度、渲染性能等,从而为用户提供更流畅的使用体验。

小白菜的博客 1101

JDBC连接DB2小结

因为工作的关系必须使用DB2,在java中使用jdbc连接需要导入DB2客户端所带的DB2java.zip包才可以正确执行其中DB2支持JDBC连接4中方式中的Type2与Type4(桥接),他们的区别是Type2的方式需要你配置好DB2客户端你的程序才会正确找的服务器,Type4就不需要了。Type2的方式很简单只要你配置好DB2的客户端就一定可以连接的上使用COM.ibm.db2.jdbc

不是程序员 1万+

db2连接超级慢

前些天碰见这么一个问题,用户的db2版本比较老还是8.1的fp是7.平台为windows.我进系统直接默 认administrator连接db2没有问题.从别的系统连接过去也没啥问题..客户觉的不安全..又建立了一个用户 我也已经让他们加入到db2admin组里.用这个用户连接db2.开始也没啥不正常..当时忙完都快中午了..我 们就去吃饭了..下午回来发现应用挂了..别的系统也连接不上

airmy的专栏 4834

垃圾文章已经删除完毕,感谢按键精灵

垃圾文章已经删除完毕,感谢按键精灵,希望以后不再有如此烦恼的人,希望csdn不再被人黑数据库

云停留的地方 461

MySQL性能优化最佳经验,随时补充

http://www.jianshu.com/p/5dd73a35d70f

feilex的专栏 397

MySQL性能优化最佳20+条经验

MySQL性能优化最佳20+条经验

中年闰土的博客 28万+

RAG的优势与挑战:优化模型以实现最佳性能

RAG(Retrieval-Augmented Generation)结合了信息检索和生成模型的优点,在多个自然语言处理任务中展现了出色的性能。然而,RAG系统在实现最佳性能的过程中面临一些挑战。以下是对RAG的主要优势与挑战的详细分析,并探讨了优化模型的策略。

chenwr_727的博客 1953

RPCS3图形设置优化:画质与性能最佳平衡方案

还在为PS3模拟器RPCS3的卡顿和画质问题烦恼吗?本文将为你提供一套完整的图形设置优化方案,帮助你在画质和性能之间找到最佳平衡点,让你的游戏体验更加流畅和精美。 通过本文,你将掌握: - RPCS3图形渲染核心原理与配置选项详解 - 不同硬件配置下的最优设置组合 - 画质提升与性能优化的实用技巧 - 常见问题的排查与解决方法 ## RPCS3图形渲染架构解析 RPCS3采用先进的图形渲染架...

gitblog_01056的博客 1571

MYSQL性能优化最佳20+条经验

MYSQL性能优化最佳20+条经验

dy_f的专栏 228

Elasticsearch 最佳性能优化

本文转自: http://wangnan.tech/post/elkstack-es03/,作者: Ghost Stories侵删击上方关注 “终端研发部”设为“星标”,和你一起掌握更多数据库知识批量提交在 CRUD 章节,我们已经知道 ES 的数据写入是如何操作的了。喜欢自己动手的读者可能已经迫不及待的自己写了程序开始往 ES 里写数据做测试。这时候大家会发现:程序的运行速度非常一般,即使 ES...

这个时代,作为程序员可能要学习小程序 355

MySQL性能优化的21条最佳经验

英文原文:《Top 20+ MySQL Best Practices》,编译:陈皓 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是

boluobn的专栏 493

XXShield性能优化指南:如何在防Crash与性能之间找到最佳平衡点

在iOS应用开发中,稳定性与性能往往是一对需要平衡的矛盾体。XXShield作为一款专业的Objective-C防Crash库,通过智能的运行时防护机制,有效防止了多种常见的Crash类型。然而,如何在提供强大防护能力的同时,最大限度地减少性能开销,是每个开发者都需要关注的问题。本文将深入探讨XXShield的性能优化策略,帮助您在防Crash与性能之间找到最佳平衡点。🚀 ## 📊 XXSh

gitblog_00371的博客 467

ConfuserEx性能优化指南:在保护强度与程序性能间找到最佳平衡

ConfuserEx是一款开源免费的.NET应用程序保护工具,它能帮助开发者保护.NET程序免受逆向工程等威胁。在使用ConfuserEx时,很多开发者都会面临一个难题:如何在确保应用程序得到足够保护的同时,又不影响其运行性能。本指南将为你详细介绍ConfuserEx的性能优化方法,助你在保护强度与程序性能间找到最佳平衡。 ## 了解ConfuserEx的保护预设 ConfuserEx提供了多

gitblog_00411的博客 435

程序员应该访问的最佳网站中文版:MySQL性能优化资源

你是否还在为MySQL查询缓慢而烦恼?是否因数据库性能瓶颈导致项目延期?本文将带你探索程序员应该访问的最佳网站中文版中,那些能显著提升MySQL性能的宝藏资源,读完你将掌握索引优化、查询调优、配置优化的实用技巧,让数据库响应速度提升10倍。 ## 为什么需要专业的MySQL性能优化资源 在软件开发中,数据库性能往往是系统瓶颈的关键所在。根据[High Scalability](http://h...

gitblog_00476的博客 779

如何优化MySQL参数:达到性能最佳状态

优化MySQL参数的目标是使MySQL尽可能地使用系统资源,如内存、CPU和磁盘等,以提高其性能水平。这样可以让MySQL更加快速和稳定地处理大量的事务求。

qq_47255712的博客 3795

mysql 最佳优化_MySQL性能优化最佳21条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1.为查询缓存优...

weixin_29793473的博客 125
上一篇: 用J2EE架构企业级应用
下一篇: JSP的运行内幕
tzhliang
博客等级 码龄25年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值