`

数据连接池分析(一)

阅读更多

最近用到一个数据库连接池,由于要分析其各种性能指标,所以对数据库连接池技术做了一个简单的分析。从网上找到一个关于连接池设计的文章,写的不错。我认为:如果要设计一个数据库连接池,可以参考它的基本思路;如果要提高性能,还有很多细节要仔细研究,并做细致的分析对比。以下是转载的文章。

连接池原理

连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池的建立、连接池中连接的使用治理、连接池的关闭。下面就着重讨论这三部分及连接池的配置问题。

1.1 连接池的建立

应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等,通过读取连接属性文件Connections.properties与数据库实例建立连接。在系统初始化时,根据相应的配置创建连接并放置在连接池中,以便需要使用时能从连接池中获取,这样就可以避免连接随意的建立、关闭造成的开销。

1.2 连接池的治理

连接池治理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进行治理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配、释放策略。

连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计模式:Reference Counting(引用记数)。该模式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。具体的实现方法是:

当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有分配出去的连接)。假如存在空闲连接,则把连接分配给客户并作相应处理(即标记该连接为正在使用,引用计数加1)。假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),假如没达到就重新创建一个连接给请求的客户;假如达到就按设定的maxWaitTime(最大等待时间)进行等待,假如等待maxWaitTime后仍没有空闲连接,就抛出无空闲连接的异常给用户。

当客户释放数据库连接时,先判定该连接的引用次数是否超过了规定值,假如超过就删除该连接,并判定当前连接池内总的连接数是否小于minConn(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。

1.3 连接池的关闭

当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。

1.4 连接池的配置

数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。minConn是当应用启动的时候连接池所创建的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速度。因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类ConnectionPool中加入两个方法getActiveSize()和getOpenSize(),ActiveSize 表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之间

分享到:
评论

相关推荐

    数据连接池有用的jar包

    3. HikariCP:这是一个高性能、低延迟的数据连接池实现,设计目标是提供最快的连接速度和最少的资源消耗。它的API简洁且易于集成。 4. Druid:阿里巴巴开源的数据库连接池,除了基本的连接池功能外,还提供了监控、...

    java 数据库 连接池驱动.rar

    - C3P0:一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 - DBCP (Apache BasicDataSource):Apache的一个开源项目,基于Jakarta Pool实现,它是Tomcat默认的数据库连接池。 ...

    weblogic配置sql数据连接池

    SQL数据连接池是WebLogic Server中的一个重要组件,用于优化数据库连接的创建、分配和管理,从而提高系统性能和资源利用率。本文将详细介绍如何在WebLogic中配置SQL数据连接池。 一、数据连接池的作用 数据连接池是...

    okhttp中连接池实现

    通过以上分析,我们可以看出OkHttp的连接池设计旨在优化网络通信的效率,降低延迟,并且提供了丰富的定制选项以适应不同应用场景的需求。理解并充分利用这些特性,可以帮助我们构建更加高效、可靠的网络应用。

    C#高效数据库连接池源码

    数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...

    weblogic连接池配置数据库断掉重连的问题

    Weblogic 连接池配置数据库断掉重连的问题是一个非常重要的问题,需要进行详细的讨论和分析。在这个主题中,我们讨论了连接池配置的基本概念、断掉重连机制的原理、配置参数的解释等。通过了解这些知识点,我们可以...

    Java 连接池源码

    Java连接池是Java应用程序中管理数据库连接的一种机制,它的出现大大提高了数据库操作的性能和效率。...通过分析个人实现的源码,你可以深入学习连接池的工作原理,了解如何设计和实现高效的数据访问策略。

    数据库连接池BoneCP源码分析报告

    BoneCP是一款高效、轻量级的Java数据库连接池实现,它的源码分析对于我们理解数据库连接池的工作原理,优化数据库性能以及进行二次开发具有重要意义。 首先,我们需要了解数据库连接池的基本概念。数据库连接池是...

    C# Socket连接池

    Socket连接池是网络编程中一个重要的优化手段,它在C#中主要应用于提高网络通信的效率和稳定性。本文将深入探讨“C# Socket连接池”的实现原理、优势以及如何利用线程池技术来构建和优化它。同时,我们也会提及...

    delphi ado 数据库连接池

    本文将深入探讨在Delphi中如何利用ADO构建数据库连接池,并结合提供的`UP_AdoDb.pas`源代码文件进行分析。 首先,我们需要了解什么是ADO。ADO是Microsoft提出的一种数据访问接口,它允许开发者通过简单的API与各种...

    数据库的连接池

    通过监控可以查看连接池的实时状态,包括当前连接数、空闲连接数、活动连接数等,帮助开发者分析和解决问题。 总结来说,数据库连接池是提高系统性能的关键工具,通过合理配置和有效管理,可以在保证应用性能的同时...

    java手写数据库连接池

    数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。本文将深入探讨如何使用Java手写数据库连接池,并基于maven进行项目构建。我们将分析四个核心类的功能,以及...

    SpringBoot+MyBatis+Druid连接池+JDBC官方驱动+ClickHouse

    在这个场景中,我们关注的是一个基于SpringBoot、MyBatis和Druid连接池的项目,它利用了ClickHouse的JDBC官方驱动进行数据操作。这个组合提供了强大的数据库管理和分析能力,特别适合大数据量的实时查询和分析。下面...

    使用连接池连接数据库

    在现代软件开发过程中,数据库连接管理是至关重要的环节之一,而连接池技术则是提高应用程序性能和资源利用率的有效手段。本文将详细介绍如何使用连接池来优化数据库连接过程,并通过Java环境中的具体示例进行阐述。...

    数据库连接池驱动程序包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特性包括: - 自动检测并修复失效的连接,确保连接池的稳定。 - 支持多线程环境下的并发控制。 - 提供连接测试...

    BIO Socket连接池

    2. 获取连接:当客户端请求服务时,从连接池中获取一个可用的Socket连接。 3. 归还连接:当客户端完成通信后,将Socket连接归还给连接池,以便后续使用。 4. 检查和回收连接:定期检查连接池中的连接是否有效,若...

    JDBC数据库连接池实现原理

    1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...

    Java 连接池【示例】

    C3P0 是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0 提供了比DBCP更好的连接池性能和更丰富的配置选项。 2.3 HikariCP HikariCP 是目前最流行的高性能连接池,以其优秀...

    强烈推荐一个简单而实用的数据库连接池工程

    本篇文章将深入探讨数据库连接池的概念、工作原理以及一个简单而实用的数据库连接池工程。 首先,理解数据库连接池的基本概念。数据库连接池是在应用服务器启动时创建的一组预定义的数据库连接,这些连接在多个用户...

Global site tag (gtag.js) - Google Analytics