数据库连接池

知识准备:

ADO.NET连接池的设置可以通过在连接字符串中进行设置

Data Source=127.0.0.1……Pooling=True;Min Pool Size=10;Max Pool Size=200;

连接池默认是打开的,默认大小不详

 

指定了连接池的设置后,程序在第一次数据库连接时会创建一定数量的连接放到连接池中

连接池的连接数越大,就越需要消耗系统资源来管理这些连接

 

提出问题:

连接池创建之后,程序在需要连接数据库时,连接池将分配和管理这些连接给程序的线程使用,多个线程并发时就容易发生类似于:

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小

 

产生该异常时,这表明了我们的程序存在数据库操作的安全隐患,最糟糕的结果就是程序会出现各种各样莫名其妙的问题,该问题很容易引起一个循环连锁,导致其他数据库操作的失败。

 

问题剖析:

认真的想想这个问题,超过连接池大小的连接将会排队等待可用的连接,假如等待的时间超过了设置的连接时间,该异常便会发生。

 

解决方案:

要综合考虑系统资源和程序需求来设计,设置连接池的大小和设置连接超时的大小为一个较大值可以缓解上述问题,但是有点治标不治本的感觉,远程连接数据库由于网络因素的限制导致连接时间是个不确定因素,并且数据库的最大连接数往往几乎是不可确定的。

最根本的还是要在使用完一个连接的时候尽可能快的关闭该连接,甚至需要销毁该连接才行,以保证同一时段的连接数不会超过连接池大小。

转载于:https://www.cnblogs.com/GISZL/archive/2011/11/14/2248941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值