什么是数据库连接池?为什么使用数据库连接池?数据库连接池工作原理
一、什么是连接池?
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
———以上参考《百度百科》
二、为什么使用数据连接池
建立一个数据库连接是一件非常耗时(消耗时间)耗力(消耗资源)的事情。之所以会这样,是因为连接到数据库服务器需要经历几个漫长的过程:建立物理通道(例如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中登记等等。
连接池就是这样一个容器:它存放了一定数量的与数据库服务器的物理连接。因此,当我们需要连接数据库服务器的时候,只需去池(容器)中取出一条空闲的连接,而不是新建一条连接。这样的话,我们就可以大大减少连接数据库的开销,从而提高了应用程序的性能。
三、数据库连接池的工作原理
连接池的工作原理主要由三部分组成,分别为
- 连接池的建立
- 连接池中连接的使用管理
- 连接池的关闭
第一、连接池的建立。
一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。
Java中提供了很多容器类可以方便的构建连接池,例如Vector、Stack等。
第二、连接池的管理。
连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:
当客户请求数据库连接时,
- 1)如果池中有空闲连接可用,返回该连接。
- 2)如果没有空闲连接,池中连接都已用完,创建一个新连接添加到池中。
- 3)如果池中连接已达到最大连接数,请求按设定的最大等待时间进入等待队列直到有空闲连接可用。
- 4)如果超出最大等待时间,则抛出异常给客户。
当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。
该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。
如果连接长时间空闲,或检测到与服务器的连接已断开,连接池管理器也会将该连接从池中移除。
第三、连接池的关闭。
当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。
四、连接池需要注意的点
1、并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。
这个问题相对比较好解决,因为各个语言自身提供了对并发管理的支持像java,c#等等,使用synchronized(java)lock(C#)关键字即可确保线程是同步的。
2、事务处理
我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-OR-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。
我们知道当2个线程共用一个连接Connection对象,而且各自都有自己的事务要处理时候,对于连接池是一个很头疼的问题,因为即使Connection类提供了相应的事务支持,可是我们仍然不能确定那个数据库操作是对应那个事务的,这是由于我们有2个线程都在进行事务操作而引起的。
为此我们可以使用每一个事务独占一个连接来实现,虽然这种方法有点浪费连接池资源但是可以大大降低事务管理的复杂性。
3、连接池的分配与释放
连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
对于连接的管理可使用一个List。即把已经创建的连接都放入List中去统一管理。每当用户请求一个连接时,系统检查这个List中有没有可以分配的连接。如果有就把那个最合适的连接分配给他,如果没有就抛出一个异常给用户。
4、连接池的配置与维护
连接池中到底应该放置多少连接,才能使系统的性能最佳?
系统可采取设置**最小连接数(minConnection)和最大连接数(maxConnection)**等参数来控制连接池中的连接。
比方说,最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。
最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过软件需求上得到。
如何确保连接池中的最小连接数呢?
有动态和静态两种策略。
动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。
什么是数据库连接池?为什么使用数据库连接池?数据库连接池工作原理相关推荐
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- java 连接池 druid_从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
- eclipse链接mysql数据池配置_Tomcat+mysql+eclipse数据库连接池配置
一.开发工具 1.tomcat版本:tomcat5.5.27 2.mysql版本:mysql 5.1 3.数据库驱动程序:mysql-connector-java-5.1.9 4.eclipse版本: ...
- 建立数据库时连接出错_PHP的福音!支持多数据库连接,高性能的开源MySQL连接池...
对于很多 PHP 开发者来说,连接数据库一直是个让人头疼的问题,那么今天 Gitee 为大家介绍的就是一款一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池. 项目名称:SMPro ...
- 数据库连接池的工作原理
对于共享资源,有一个很著名的设计模式:资源池(resource pool).该模式正是为解决资源频繁分配.释放所造成的问题.数据库连接池的基本思想就是为数据库连接建立一个"缓冲池" ...
- javaweb mysql 连接池 c3p0 配置_JavaWeb基础—数据库连接池DBCP、C3P0
一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...
- jsp获取连接池的实时连接数_数据库连接池原理分析及模拟实现
数据库访问 访问数据库主要有以下几个步骤: 加载数据库驱动 创建数据库连接 执行访问操作并处理执行结果 关闭连接,释放资源 在每一次请求数据库都要经历上述过程,创建连接和释放资源也都是些重复性的动作, ...
- 何为数据库连接池?其工作原理是什么?
连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用.当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接.当这个连接使用完毕后,将返回到连接池中,等待为 ...
- oracle连接耗尽,linux熵池耗尽,导致oracle数据库连接失败
linux熵池耗尽,导致oracle数据库连接失败 今天接到某业务开发人员的报错信息: 1.png 随后又接到应用运维人员的报错信息: 2.png 连接失败,errorCode 17002, stat ...
- java连接池 dbcp 样例_DBCP数据库连接池的简单使用
0.DBCP简介 DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目.DBCP通过连接池预先同数据库建立一些连接放在内存中(即连接池中 ...
最新文章
- 盘点52个全球人工智能和机器学习重要会议
- 快速排序pascal程序
- scanf的拓展用法——匹配特定字符
- Disruptor并发框架-1
- Quartz 2D编程笔记
- 搜索引擎、相关性算法的测试
- 《Gradle权威指南》--Android Gradle多项目构建
- jquery如何拿到一个对象_jQuery 怎么获取对象
- sql统计表中各类型金额_产品经理市场需求旺盛的10大基础技能——第1篇读透SQL...
- Smarty 获取当前日期时间和格式化日期时间
- matlab-lsqcurvefit函数
- SAP PP制造生产教程
- apk一键脱壳工具_一键新机!强大的抹机王来了!
- 解决windows server 2012R2操作系统激活报错0xc000022
- 触动精灵mysql用法教程_触动精灵如何使用 触动精灵脚本编写教程攻略大全
- ZStack--级联框架
- 网页上显示天气预报信息的代码(将代码拷贝到你的网页上即可,当然,天气预报只能在联网的情况下才能使用)
- 342_Linux Mint使用国内的软件源
- WebDAV之葫芦儿·派盘+SwiftScan
- 用户场景分析的四要素是什么?