数据库连接池

知识准备:

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

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

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

 

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

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

 

提出问题:

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

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

 

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

 

问题剖析:

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

 

解决方案:

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

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

posted @ 2011-11-14 21:43  GISZL  阅读(231)  评论(0编辑  收藏  举报