现在的位置: 首页 > 综合 > 正文

数据库连接池

2013年10月05日 ⁄ 综合 ⁄ 共 1476字 ⁄ 字号 评论关闭

author:skate

time:2010-10-13


 

数据库连接池的工作原理

 

连接池就是连接数据库对象的缓冲存储池 ,就是预先建立一些连接放置于缓冲存储池中以备使用,当.NET应用程序中需要建立与数据库连接时,只需从缓冲存储池中取一个连接用,而不用新建。使用完毕后,只需释放回缓冲存储池即可。连接池内部提供一种管理机制,实时地对应用程序提供获取和释放连接的接口。客户端可以透明地共享连接池中的多个连接对象。下面就已.net连接池为例。

 

1.1 连接池的创建

 

使用ADO.NET连接池机制访问SQL Server数据库时,必须清楚连接是通过对连接字符串精确匹配的法则被池化的。当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。

 

1.2 连接池的管理策略

 

连接池是为每个唯一连接字符串创建的。创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。连接池设有空闲队列和已分配队列。空闲队列存放未分配的连接,已分配队列存放正在使用的连接。连接池的管理包括三个重要环节:请求连接、释放连接和移除连接

 

 

请求连接:

 

当.NET应用程序请求连接SQL Server数据库时,如果存在空闲的连接,则将从池中获取连接对象。若没有空闲的连接,且连接池中的连接数未达到最大连接数时,则生成一个新的连接实例分配给应用程序。若连接池中的连接数已达到最大连接数,则将应用程序的请求放入等待队列,若在规定的等待时间内有可用的连接,则应用程序取得相应的连接。否则连接请求失败。

 

 

释放连接:

 

.NET应用程序通过调用连接对象的Close或者Dispose方法使连接返回到连接池中,这就是通常所说的显式关闭连接。建议在使用完连接对象后总是显式关闭连接,以便使连接能够返回到连接池中。没有显式关闭的连接可能不会添加或者返回到连接池里,只有连接数目达到了最大值且该连接仍然有效时才会被返回到连接池中。

 

 

连接移除:

 

连接池管理程序会定期扫描连接池,如果检测到与服务器的连接已断开,连接池管理程序将从池中移除该连接。值得说明的是,只有在尝试与服务器进行通信后,才可以检测到这种情况,如果扫描到某连接不再连接到服务器,则会将其标记为无效。对于已释放到池中并标记为无效的对象,管理程序将永久移除这些连接。如果检测到与服务器的连接没有断开但连接生存期已过期,连接也将被移除。.NET应用程序调用连接对象的Close或者Dispose方法关闭连接时,并不是真正关闭实际的数据连接,若超过默认时间(60秒)未再次使用,才会真正被关闭。

 

 

连接池的关闭

连接池一旦创建,直到活动进程终止时才会被销毁。当.NET应用程序退出时,关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库。

 

 

 连接池设计的必要性

ADO.NET有四种数据提供程序SQLClient、OleDb、Odbe、OracleClientI ,如果使用的是OleDbConnection、Odbc-Connection或OracleConnection类,则连接池将由提供程序自动处理,不必自己进行管理。若使用SqlConnection类,则连接池被隐式管理,但也提供选项允许自己管理池。访问SQL SERVER数据库当然用SQLClient数据提供程序。

 

 

 

 

-------end-------

 

 

 

 

 

 

 

 

抱歉!评论已关闭.