高速缓存和连接池对访问数据库性能的影响

Oracle 性能问题排查 Oracle 性能问题排查应用程序层面代码逻辑问题:检查应用程序的代码逻辑,看是否存在不合理的查询语句或者频繁的数据库操作。例如,是否有不必要的嵌套查询、循环中多次执行相同的 SQL 语句等。可以使用代码审查工具或者日志记录来定位问题代码。连接池配置:确认应用程序的数据库连接池配置是否合理。如果连接池的最大连接数设置过小,可能会导致应用程序在高并发情况下等待数据库连接,从而影响响应时间。可以调整连接池的参数,如最大连接数、最小连接数、连接超时时间等。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 初识高速缓存和连接池 设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好 了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管 道传输和设备净化,才到达你饮水的容器中。上述过程是必须的,但并不是每一杯水的 产生都必须把上述过程重复一次。你可以用一个大一点的容器(例如缸或罐等)来盛大 量的水,喝水之前分到杯子小部分中即可,你的代价只是把水从缸转移到杯子;你还可 以在大量用水(例如洗澡或洗衣服等)时,只需打开水阀,而不必临时铺设通往水源的 管道和购买净化水的设备。因为水是人们生活不可缺少的东西,每时每刻都在被大量地 使用,而且物理本质也完全相同,所以政府会铺设管道和建设水处理站,完成那些比较 困难的工作,达到资源共享的目的,而你也可针对自己的需求,用容器来盛那些具有特 定用途的水。本文将要和你讨论的高速缓存和连接池与上述特定容器和传输管道有很多 相似之处,它们都达到了同一个目的:在满足用户意愿的前提下,尽可能地共享资源, 以提高整个系统的性能。 高速缓存和连接池是数据访问中的重要技术,某些情况下的应用对访问数据库的性能有 巨大的提高,而且都得到了数据库业界的普遍支持。前者由DBMS厂商针对自己的数据库 实现,提供可供用户配置的方案;后者是JDBC的一个标准接口,由支持J2EE技术的应用 服务器厂商提供具体的实现,而你的Java程序代码无需更改。本文将向你简单介绍高速 缓存和连接池的概念和机制,并以PointBase数据库为例向你展示高速缓存的应用,而一 个简单的连接池应用场景将向你描述应用的条件和提高的性能。 Cache(高速缓存)和Connection Pool(连接池)的概念和机制 它们不是数据库独有的技术,但却得到数据库业界的普遍支持,并在其它数据存取和对 象复用领域有很多类似的应用。 Cache(高速缓存) 作为个人计算机的日常使用者,你肯定听说过这些名词:Cache(高速缓存)、Memory( 内存)、Hard disk(硬盘)。它们都是数据存取单元,但存取速度却有很大差异,呈依 次递减的顺序。对于CPU来说,它可以从距离自己最近的Cache高速地存取数据,而不是 从内存和硬盘以低几个数量级的速度来存取数据。而Cache中所存储的数据,往往是CPU 要反复存取的数据,有特定的机制(或程序)来保证Cache内数据的命中率(Hit Rate) 。因此,CPU存取数据的速度在应用高速缓存后得到了巨大的提高。 对于数据库来说,厂商的做法往往是在内存中开辟相应的区域来存储可能被多次存取的 数据和可能被多次执行的语句,以使这些数据在下次被访问时不必再次提交对DBMS的请 求和那些语句在下次执行时不必再次编译。 因为将数据写入高速缓存的任务由Cache Manager负责,所以对用户来说高速缓存的内容 肯定是只读的。需要你做的工作很少,程序中的SQL语句和直接访问DBMS时没有分别,返 回的结果也看不出有什么差别。而数据库厂商往往会在DB Server的配置文件中提供与C ache相关的参数,通过修改它们,可针对我们的应用优化Cache的管理。下图是在Win2K 中配置MS Access数据源的界面,在"驱动程序"部分你可设置的页超时和缓冲区大小就是 和Cache有关的参数。在后面的讨论中,我将展示一个更复杂的数据库,向你解释Cache 对访问数据库性能的影响和如何寻找最优的配置方案。 Connection Pool(连接池) 池是一个很普遍的概念,和缓冲存储有机制相近的地方,都是缩减了访问的环节,但它 更注重于资源的共享。下图展示了建立"调制解调器池"以共享调制解调器资源的VPN拨号 方案: 对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立"连接池"以提 高访问的性能。我们可以把连接当作对象或者设备,池中又有许多已经建立的连接,访 问本来需要与数据库的连接的地方,都改为和池相连,池临时分配连接供访问使用,结 果返回后,访问将连接交还。 JDBC 1.0标准及其扩展中没有定义连接池,而在JDBC 2.0标准的扩展中定义了与连接池 相关的接口。与接口对应的类由应用服务器厂商实现,你可在对服务器的管理过程中调 节某个数据库连接池的参数。下图简略地描述了连接池的运行机制: 高速缓存的参数设定 在PointBase数据库DB Server的配置参数列表中,我们可以找到这几个参数:cache.ch eckpointinterval、cache.size、SQLCaching.size等。下表是对各个参数的描述: 参数名 参数描述 cache.checkpointinterval 检查点的时间间隔 cache.size 高速缓存的最大页数(素数时,性能最好) SQLCaching.size 高速缓存中SQL语句的个数 对于cache.checkpointinterval来说,和前面Access界面中的页超时是一个概念,它指 定了页面内容更新的时间间隔,这取决于你的应用对时效性的要求程度。 对于cache.size来说,指定了页面的个数,一般应设定为符合你查询结果的需求。至于 为何是素数,我也纳闷,不过还是遵照厂商的指示吧。 对于SQLCaching.size来说,指定了存储的经过编译的SQL语句的个数,你可以把它设定 为0,从而取消这个选项。 使用Cache后,性能到底有多大提高?我打开PointBase的Console通过JDBC驱动访问Ser ver,将SQL菜单下的Timing Mode选上,以显示各个步骤的耗费时间。执行语句是: SELECT * FROM PRODUCT_TBL 第一次访问,总计耗时1082毫秒,而编译耗时771毫秒。 紧接着的第二次访问,总计耗时仅为160毫秒,而编译耗时为0。 再接着的第三次访问,总计耗时仅为91毫秒,编译耗时也为0。 关闭Console,等待超过30秒之后,重新开启Console,执行相同的语句,总计耗时210毫 秒,编译耗时为20毫秒。 自等待超过30秒之后,执行语句,总计耗时101毫秒,编译耗时为0。 由此可以看出,高速缓存的应用大大提高了访问数据库的性能,而其参数的设定则要依 据前面对它们的描述来进行,需要你仔细阅读数据库的配置文档。 连接池的设置和应用 我选择IBM公司的应用服务器平台WebSphere来给大家演示连接池的设置,使你面对友好 的Web界面,可以体验到非常简易的操作场景。 首先,我们进入WebSphere的管理控制台,这是一个非常漂亮的Web界面: 紧接着,我选定一个数据源:Session Persistence datasource,就可看到这个数据源 的属性配置了。在这儿,仅仅列举和连接池有关的属性: Minimum Pool Size 池中保持的连接的最小数目;有新的请求,且没有激活连接可供供? 用时,池中连接数将增大,到最大连接数为止 Maximum Pool Size 池中保持的连接的最大数目;当这个数目达到,且没有激活连接接? 供使用时,新的请求将等待 Connection Timeout 当连接数达到最大值,且激活连接都在被使用时,新的请求等待待? 时间 Idle Timeout 连接可在池中闲置的时间;超过将释放资源,到最小连接数为止 Orphan Timeout 连接在被应用控制时,可闲置的时间;超过将返回池中 你可以根据需要来修改这些数值,以满足你的应用需要。接下来,我们讨论一下连接池 的应用。 EJB访问数据库(场景1,使用JDBC 1.0) import java.sql.*; import javax.sql.*; ... public class AccountBean implements EntityBean { ... public Collection ejbFindByLastName(String lName) { try { String dbdriver = new initialContext().lookup("java:comp/env/DBD RIVER").toString(); Class.forName(dbdriver).newInstance(); Connection conn = null; conn = DriverManager.getConnection("java:comp/env/DBURL", "userI D", "password"); ... conn.close(); } ... } 如果EntityBean是一个共享组件,那么每次客户请求时,都要建立和释放与数据库的连 接,这成为影响性能的主要问题。 EJB访问数据库(场景2,使用JDBC 2.0) import java.sql.*; import javax.sql.*; // import here vendor specific JDBC drivers public ProductPK ejbCreate() { try { // initialize JNDI lookup parameters Context ctx = new InitialContext(parms); ... ConnectionPoolDataSource cpds = (ConnectionPoolDataSource)ctx.lo okup(cpsource); ... // Following parms could all come from a JNDI look-up cpds.setDatabaseName("PTDB"); cpds.setUserIF("XYZ"); ... PooledConnection pc = cpds.getPooledConnection(); Connection conn = pc.getConnection(); ... // do business logic conn.close(); } ... } EJB组件利用JNDI的lookup()方法定位数据库的连接池资源,利用getConnection()方法 得到已经打开的数据库连接,而用close()来释放连接,放回池中。因此,与场景1相比 ,少了与数据库建立物理连接的损耗。对于原本要频繁打开和关闭物理连接的应用来说 ,通过这种建立逻辑连接并复用的方法,性能肯定能够得到大幅度提高。 性能问题的深远思索 性能问题并不局限于数据库的应用上,而是存在于每个软件系统中。我们希望软件系统 付出的最小,而获得的最大,因而无时无刻不在优化它们。通过《Java程序访问数据库 的速度瓶颈问题的分析和解决》和本文,我对Java程序访问数据库的性能问题做了分析 ,并提供了优化Java程序的解决方案,希望对你有所帮助。 也许你会关心碰到类似的性能问题时应如何分析和解决,我就针对此次探讨"访问数据库 的速度瓶颈"问题的过程中碰到的难题、网友的意见和自己的体会,作一个关于"方法论 "的经验总结,希望能够抛砖引玉,更好地解决类似的问题。 解决性能问题的几条经验 1、 不要让硬件的低配置成为软件正常运行的障碍,后者有升级前者的需求,请立即满 足;经常碰到这样的问题"P166 64M的机子跑Win2K MySql JBoss,能跑么?"我在回答" 可以"的同时只有对着屏幕发呆了。 2、 尽量使用商业软件,并享受良好的售后技术支持;如果你没有黑客精神,请不要使 用自由软件。 3、 分析好自己的问题,也许它的本质和他人的不同;没有一把钥匙可打开的任一把锁 。 4、 确定瓶颈环节的位置;解决了瓶颈问题,往往整个的性能问题就解决了,千万不要 抓着边缘的问题不放。 5、 将瓶颈环节细分为多个顺序的流程,用逐个替代的方法来试探瓶颈的核心位置;细 分问题使你都问题有更进一步的了解。 6、 做自己能做的和该做的事情,始终面向自己的现实问题;不要尝试那些应该由厂商 解决的问题(例如,自己写个JDBC驱动)。 7、 他人的方案只供自己参考,解决要靠自己思考;你我应用的情形不同,应用解决方 案要在理解他人的方案之后。 8、 观察新技术,应用新技术;它往往包含了前人对问题解决的思路,只是对你来说不 可见。 9、 问题得到解决后,立即罢手,并汇报结果;在现实问题得到解决后,没有必要花费 精力在非核心的问题上,也许它们永远不会被碰到,不要假想问题让自己解决。 上述经验为个人即兴的总结,并未有严谨的逻辑推导,仅代表我解决技术问题的思路, 供你碰到类似问题时参考。 可以提前告诉大家的是,下一篇文章我将把主题转移到JDO的介绍和讨论上。这个陌生的 API已经进入Final Draft了,可它到底能够给数据存取带来什么好处,和JDBC有什么关 联的地方,《JDO(Java Data Object)的发展和介绍》将向你娓娓道来。
HDMI协议介绍(一)--Overview HDMI全称(High Definition Multimedia Interface)高清多媒体接口,支持在单线缆上传输全数字高清视频和多声道音频。 阅读详情

相关推荐

【gateway nc adapter虚拟网卡 win11 联想】问题的解决

由于需要登录公司内网,于是启用奇安信VPN。但启动后报出网关未连接的问题,于是我检查了我的网络适配器,并尝试解决,以下给出几种我实践过程中的行动,并附带最后成功的解决方法。

m0_73602417的博客 6559

jdbc执行sql慢的问题

今天发现JDBC的一个怪问题。 同样的sql,在mysql客户端中执行只要0.6、7秒,但是在JDBC中执行却要十二三分钟!这差距也太大了!而且只是其中一张表如此,查看表结构,很正常,没有索引,连主键都没有,就只有字段,字段类型也没有BLOB、CLOB之类的大数据类型,和其他表相比,字段数量也差不错。那就奇怪了,虽说JDBC是要慢些,但是不至于差别几百倍吧。再对比sql,唯一不同的就是这个慢的s...

culven的专栏 3193

详解Nacos集群搭建

在我们日常的开发当中,用的都是单点Nacos,这种模式,我们自己开发测试玩一玩还可以,但是到了企业的生产环境之下,你还这么玩的话,那肯定是要出大问题了。因为在企业当中,我们更加强调的是高可用,所以在企业的生产环境下,Nacos一定要做成个集群。

博客 1万+

高速缓存和连接池对访问数据库性能的影响(WebSphere)

高速缓存和连接池对访问数据库性能的影响作者:自由Java传道士     来自:水木清华  初识高速缓存和连接池  设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管道传输和设备净化,才到达你饮水的容器中。上述过程是必须的,但并不是每一

purecoffee的专栏 1766

在WebView中对第三方H5页面的文本密码框添加自定义随机键盘

前言: 首先介绍一下这个需求的背景,由于公司是涉及到金融行业的需要与银行对接资金存管。出于保密性这里不直接列出公司名字和银行名字。从2018年国家对金融行业大整改以来,为了能够顺利通过备案,我们也跟着政府的脚步一步一步走向合规。 好了,大致就是因为要通过备案,必须把这个需求实现,否则将不会通过。 需求内容就是,当客户端有关资金交易的时候,会通过加密数据以及秘钥的方式把第三方银行的页面(充值、...

比较喜欢、笑的博客专栏 1586

高速数字信号硬件设计:灵巧手方向核心技能与实战解析

在机器人产业加速演进的今天,灵巧手等高自由度末端执行器对硬件电路设计提出了更高要求。传统硬件工程师熟悉功能、功耗与EMC,而灵巧手设计还需在极小空间内融合多路电机驱动、高速数字接口与微弱模拟信号采集。信号完整性与电源完整性成为决定系统稳定性的关键:信号上升沿决定有效带宽,阻抗匹配、回流路径和去耦策略直接影响通信质量与抗干扰能力。从阻抗计算、等长设计到FPC布线,再到电源预算与纹波抑制,这些高速数字信号设计基础原理不仅适用于服务器主板,更是灵巧手控制器开发与调试的必修课。本文面向从事机器人硬件、嵌入式系统与电

weixin_29172963的博客 239

java JDBC编程流程步骤

JDBC:Java Data Base Connection JDBC是用于运行sql语句并从数据库中获取新新的java API. JDBC是用来(让我们的程序)通过网络来操作数据库的,作用非常重要;JDBC技术也是Java核心技术之中的一个。 是使用JDBC驱动程序訪问数据库的首选方式 通过JDBC操作数据库——步骤:   第1步:注冊驱动 (仅仅做一次)   第2步:建立连接...

weixin_30727835的博客 441

傻白入门芯片设计,SystemVerilog Assertion(SVA)学习(二十一)

对SVA(SystemVerilogt Assertion)有了更深刻的认识,对经典的AveMC形式验证工具进行了介绍

qq_46675545的博客 8474

[转载]高速缓存和连接池对访问数据库性能的影响

高速缓存和连接池对访问数据库性能的影响初识高速缓存和连接池 设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好了。通常,一杯水的产生包括从水 源(井水、河水或江水、甚至海水等)抽取,通过管道传输和设备...

congji3817的博客 202

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2721

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3658

java中的高速缓存和连接池对访问数据库性能的影响

一.初识高速缓存和连接池   设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好 了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管 道传输和设备净化,才到达你饮水的容器中。上述过程是必须的,但并不是每一杯水的 产生都必须把上述过程重复一次。你可以用一个大一点的容器(例如缸或罐等)来盛大 量的水,喝水之前分到杯子小部分中即可,你的代价只是把水从缸

xxcc的专栏 2820

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

高速缓存和连接池对访问数据库性能影响

 初识高速缓存和连接池设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管道传输和设备净化,才到达你饮水的容器中。上述过程是必须的,但并不是每一杯水的产生都必须把上述过程重复一次。你可以用一个大一点的容器(例如缸或罐等)来盛大量的水,喝水之前分到杯子小部分中即可,你的代价只是把水

kinglino520的专栏 483

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[转]高速缓存和连接池对访问数据库性能影响

 高速缓存和连接池对访问数据库性能影响本文将要和你讨论的高速缓存和连接池与上述特定容器和传输管道有很多相似之处,它们都达到了同一个目的:在满足用户意愿的前提下,尽可能地共享资源,以提高整个系统的性能。初识高速缓存和连接池  设想这样一种情形:你突然口渴,需要一杯水来缓解,从心情上来讲,当然是越快越好了。通常,一杯水的产生包括从水源(井水、河水或江水、甚至海水等)抽取,通过管道传

530

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

26种提高ASP.NET网站访问性能的优化方法

1. 数据库访问性能优化数据库的连接和关闭  访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。 ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。  连接池的大小是有限的,如果

当当当当 678

数据库访问性能优化

1.数据库访问性能优化   数据库的连接和关闭    访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响

chenandczh的专栏 1474

NET 数据访问架构指南

文章信息] 作者: 时间: 2002-10-14

cxzhq2002的杂记 960

ASP.NET优化性能技巧:数据库,字符串

1. 数据库访问性能优化   数据库的连接和关闭   访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。asp.net中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。连接池的大小是有限的,如果在连接池达

enenwenwen的专栏 560
上一篇: 使用Java的反思
下一篇: Jsp JavaBean循序渐进教程(一)
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值