.Net与Oracle的数据库连接池(Connection Pool)
概述:
数据库连接池允许应用程序重用已存在于池中的数据库连接,以避免反复的建立新的数据库连接。这种技术能有效提高应用程序的伸缩性,因为有限的数据库连接能够给大量的客户提供服务。这种技术同时也提高的系统性能,避免了大量建立新连接的开销。

 

开发一个具有伸缩性的、高性能应用程序应该最大限度的减少建立连接所花费的时间,保持数据库连接最大限度的有效,以存取数据。当一个数据库连接关闭时,它只是由连接池收回以待重用,并未真正释放。但是,如果连接池被释放,数据库连接将会被释放掉。
开发人员应当注意不要依赖垃圾回收机制去释放数据库连接,因为当参数超出作用域时,数据库连接并没有得必要的关闭,这种数据库资源泄漏将导致建立新连接时抛出连接错误。
建立数据库连接池
当打开一个数据库连接时,一个数据库连接池也就创建了。数据库连接池的创建与数据库连接字符串精确的相关(包括空格、大小写)。所有的连接池是根据连接字符串来区分的。在创建一个新的数据库连接时,如果连接字符串不完全相同,将创建不同的连接池。
一旦数据库连接池被创建,它将一直存在直到该进程结束。维护一个非活动状态的连接池几乎不需要什么系统开销。
连接池中的数据库连接
连接池根据唯一的连接字符串被创建。在连接池被创建的同时,连接池将创建最小的数据库连接,当连接不够用时,连接池将逐个添加数据库连接直到达到 最大连接数,此后的连接请求将被加入请求队列里。当调用数据库连接对象的Close方法或Dispose方法时,数据库连接将被数据库连接池回收。
当数据库连接使用完成后,要调用Close方法或Dispose方法将它返回连接池。没有显式释放的数据库连接可能会没有返回连接池。
注意不要在类的Finalize方法中调用任何管理类如Connection,DataReader等的Finalize方法,必须将数据库连接的释放权交给连接池。
释放数据库连接
当数据库连接超时或服务已经完成时,连接池将会将其资源释放,这只能通过试图与数据库通讯来判断。如果发现数据库连接不可用,它将被标记为不可用资源。数据库连接池将定时扫描数据库连接,释放所有不可用资源。
如果发现现有的数据库连接不可用,那么可能是该连接被数据库连接池标记为不可用资源了,这时将抛出一个异常。尽管如此,你还是必须释放连接,将它返回连接池。
支持Transaction
数据库连接池内的数据库连接是按照Transaction Context划分的,每当连接池接到连接请求时,他将返回与请求者Transaction Context相匹配的数据库连接。因此,每个连接池都由数个Transaction Context相关的数据库连接和一个Transaction Context无关的数据库连接组成。当数据库连接被返回连接池时,它将被放回对应的Transaction Context组中。
用连接字符串关键字控制数据库连接池
OracleConnection对象的属性ConnectionString有一些能支持连接池控制的key-value字符串。下表是这些key-value字符串的详细说明。
名称
默认值
说明
Connection Lifetime
0
当数据库连接被返回到连接池中时,它的创建时间将与当前时间比较,如果超过了Connection Lifetime规定的时间,它将被释放掉。
为0时将被视为最大连接时间。
Enlist
'true'
当此值为true时,池中现存的所有数据库连接将被加入到它的创建线程的Transaction Context中。如果不存在这个Transaction Context则无任何变化。
Max Pool Size
100
连接池能建立的最大数据库连接数。
Min Pool Size
0
连接池要保持的最小数据库连接数。
Pooling
'true'
当设为true时,数据库连接将由相应的连接池管理。

.Net与Oracle地数据库连接池(Connection Pool)相关推荐

  1. 数据库连接池 Connection Pool 是什么,做什么

    重新拾起Java来学,就遇到了一本不错的书<Hibernate 深入浅出>电子工业出版社,相较其他的工具类书,本书中用词更加生动活泼,从字句之间就可以看出作者的用心与深厚的文字功底,让人相 ...

  2. 连接池Connection Pool 单例设计

    连接池单例模式 1.私有化ComboPooledDataSource将其作为属性,使其实现单例 2.DataSourceFactory实现懒汉模式,这样作为属性的连接池cpds也就变为了单例 3.从连 ...

  3. 《ADO.NET 2.0高级程序设计》读书随笔(1)使用连接池connection pool

    转载于:https://www.cnblogs.com/xuxiaoguang/archive/2007/12/18/1004591.html

  4. c3p0 服务启动获取连接超时_JDBC数据库连接池

    连接池的本质是构建一个容器,容器是用来存创建好的线程,http连接.数据库连接.netty连接等 各个连接池的使用大致分为三个部分 1.首先是初始化连接池,根据设置相应的参数.连接池的大小.核心连接数 ...

  5. 数据库连接池 ( 二 ) 连接池概念

    2.连接池概念 2.1.普通模式开发,存在的问题: (1)普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证 ...

  6. 数据库连接池的实现及原理

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...

  7. mysql连接池的原理_数据库连接池的实现及原理

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...

  8. Tomcat数据库连接池配置沤心沥血而作……

    数据库连接池配置续之Oracle配置首先说一下,今天是全国哀悼日的第三天,也是最后一天,让我们为死者默哀,为伤者祈福吧,但愿苍天不要再给中国人民添乱了,愿天下都平平安安-- 在前几篇文章,我是以pos ...

  9. Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

    文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...

最新文章

  1. linux获取最高权限并取消_通过安卓渗透WIN7获取系统最高权限
  2. 【Java报错】mapper传入array\collection\list类型的参数时报BindingException:Parameter `` not found(问题复现+3种解决方法)
  3. wordpress后台添加子菜单 add_submenu_page()
  4. 工程设计论——如何写好工程代码
  5. CoreOS 收购 Quay.io 发布私有 Docker 仓库
  6. 1流式细胞术荧光比值计算_流式细胞术技巧攻略!
  7. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
  8. 解决vue axios跨域请求发送两次问题
  9. 遥感数字图像处理——第三章——空间域处理方法
  10. 计算机中常用计算公式,计算机常用计算公式汇总.doc
  11. 成为一名数据分析师,需要学习统计学吗?
  12. CyanogenMod源码下载和编译 CM7
  13. layui前端项目打包方法_layui封装模块基础教程
  14. 什么是Python中的Pip?
  15. 阿里云大咖秀——了不起的“空格”
  16. java keyevent 组合键_JAVA中KeyEvent类键盘各键的代码
  17. 2017.04.05 仿制网站
  18. 热修复——深入浅出原理与实现
  19. 陌上花开,可缓缓归矣
  20. Java 实现HTTP请求的四种方式总结

热门文章

  1. 经典C语言程序100例之五六
  2. echart label 不随值变化位置_炼丹神器来了! 模型结构、训练日志、特征提取都能可视化,调参不慌了!...
  3. 01_sklearn,安装sklearn,软件环境要求,第三方发行版
  4. Impala介绍,Impala架构,Impala安装,impala Shell ,分区创建,refresh,load数据,获取数据的元数据
  5. overridePendingTransition的简介
  6. ubuntu下安装mysql
  7. SQL基础操作_2_操作多个表
  8. docker image name 更改_将前端应用打包成docker镜像并部署?仅需一个脚本就搞定
  9. python从零基础到项目实战 当当_Python 3.x网络爬虫从零基础到项目实战
  10. CNN目标检测(一):Faster RCNN详解