博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用连接池

Posted on 2010-12-07 20:33  itcfj  阅读(446)  评论(0编辑  收藏  举报

使用连接池

王然
微软认证讲师
wangran@itgoldenbridge.com

 

 

点击添加MSN机器人小新
为您收听下载MSDN中文网络广播课程加油助力!

本次课程内容包括
? 连接池
? 使用连接池 ? 管理连接池 ? 使用事务 ? 监视连接池

收听本次课程需具备的条件
? 熟悉基本的 ADO.NET 连接 ? 熟悉 .NET 数据库应用开发
Level 300

连接池的概念
? 连接池是一个进程
? 该进程保存连接并使其处于活动状态,使
    连接可以被重复使用

如果没有连接池
? 连接到数据源
- 建立物理通道(例如套接字或命名管道) - 与服务器进行初次握手
分析连接字符串信息
- 由服务器对连接进行身份验证 - 运行检查以便在当前事务中登记 - …

连接池的作用
? 通过数据库连接池,应用程序可以重用池
    中现有的连接,而不必反复与数据库建立 新的连接。
? 使用连接池可显著提高应用程序的可伸缩
    性,因为有限数量的数据库连接可以为数 量大得多的客户端提供服务。
? 同时,由于可以节省建立新连接所需的大
    量时间,使用连接池还能够改善性能。 ? 对于应用程序来说是透明的

工作过程
?  Pooling 参数为 true 时(默认),连接池启用 ?  两个连接的连接字符串相同时 ,被放置在一个连
    接池中
?  两个连接的连接字符串不同时,被放置在不同的
    连接池中
?  连接被 Close 时 , 连接被放置在连接池中以备重
    用
? 连接被 Dispose 时,  连接被彻底删除
?  连接池最后一个连接被 Close 时,连接池被删除

控制 SQL Server 连接池
? SQL Server 连接池有关的连接字符串变量
? Connection Lifetime  连接生存期
默认值  0
? Connection Reset        连接重置
默认值 True
? Enlist
登记
默认值 True
? Max Pool Size
最大池大小      默认值 100
? Min Pool Size
最小池大小      默认值 0
? Pooling

默认值 True

控制OLE DB连接池
? 默认连接池功能是激活的,在 OLE DB 连
    接中使用
? 如要禁用 OLE DB 连接池,在连接字符串
    中指定“OLE DB Services=-4” ,代码如下
Dim cnNorthwind As New OleDbConnection()
cnNorthwind.ConnectionString =
"Provider=SQLOLEDB;" & _ "Data Source=London;" & _ "Integrated Security=SSPI;" & _ "OLE DB Services=-4;" & _ "Initial Catalog=Northwind;"

使用连接池
? 连接是通过连接字符串上的完全匹配算法
    进行池化的。
? 池机制甚至对名称-值对之间的空格也敏感。

关闭连接
? 使用完连接后,立即显示关闭连接 ? 不要在类的Finalize方法中关闭连接
- 因为它在垃圾回收时才会执行
- 很有可能会造成连接池已满
? DataAdapter前显式打开的连接不会自动关
    闭

连接池的驻留
? 如果 MinPoolSize 在连接字符串中未指定
    或指定为零,池中的连接将在一段时间不 活动后关闭。
? 如果指定的 MinPoolSize 大于零 , 在
    AppDomain 被卸载并且进程结束之前,连 接池不会被破坏。
? 非活动或空池的维护只需要最少的系统开
    销。

清除连接池
? ClearAllPools
- 清除给定提供程序的连接池。
? ClearPool
- 清除与特定连接关联的连接池。
- 如果在调用时连接正在使用,将进行相应的标 记。连接关闭时,将被丢弃,而不是返回池中。

池碎片
? 池碎片是许多 Web 应用程序中的一个常见
    问题,应用程序可能会创建大量在进程退 出后才会释放的池。这样,将打开大量的 连接,占用许多内存,从而影响性能。
- 因为集成安全性产生的池碎片
- 因为许多数据库产生的池碎片

事务支持
?  连接是根据事务上下文来从池中取出并进行分配的。
-  除非在连接字符串中指定了 Enlist=false,否则,连接池将确保连
    接在 Current 上下文中登记。
-  当连接通过登记的 System.Transactions 事务关闭并返回到池中
    时,连接将被保留,以便下次使用同一 System.Transactions 事 务请求该连接池时,可返回同一连接(如果该连接可用)。
-  如果该连接不可用,则会打开新连接。
-  如果该事务没有可用连接,在该连接打开时,将自动注册该连接。
?  当连接关闭时,它将被释放回池中,并根据其事务上下文
    放入相应的子部分。
-  因此,即使分布式事务仍然挂起,仍可以关闭该连接而不会生成
    错误。
-  这样,就可以在随后提交或中止分布式事务。

事务专有池
? 连接池被划分为多个事务专有池和一个与 当前尚未在事务中登记的连接对应的池。 ? 对于与特定事务上下文关联的线程,会返 回相应池(该池包含在该事务中登记的连 接)的连接。
? 这使得使用已登记的连接成为一个透明的
    过程。

使用池对象管理连接池
?   作为分布式开发人员,鼓励禁用 OLE DB 资源池和/或 ODBC 连接池,
    并使用 COM+ 对象池作为池化数据库连接的技术。
?   这有两个主要原因:
-  池大小和阈值可以明确的配置(在 COM+ 目录中)。 -  性能得到改善。池对象方法的性能比本机池高 50%。
?   如果您使用的是 OLE DB .NET 数据提供程序 , 您可能需要考虑使用
    COM+ 对象池,以便充分利用卓越的配置和改善的性能。如果您为此 目的开发池对象,则必须禁用 OLE DB 资源池和自动事务登记(例如, 通过在连接字符串中包含 "OLE DB Services=-4")。您必须在自己的 池对象实现中处理事务登记。
?   对于SQL Server .NET 数据提供程序来说,它在内部使用池机制,所
    以您不再需要开发自己的对象池机制(在使用该提供程序时)。因此, 您可以避免执行与手动事务登记相关联的复杂任务。

监控连接池
? SQL Server 事件探查器 ? 性能监视器
? 编程方式

回顾
? 连接池
? 使用连接池 ? 管理连接池 ? 使用事务 ? 监视连接池

获取更多MSDN资源
?  MSDN中文网站
    http://msdn2.microsoft.com/zh‐cn ?  MSDN中文网络广播
    http://  www.microsoft.com/china/msdn/webcast ?  MSDN中文网络广播课程预告邮件
    http://www.microsoft.com/china/msdn/WebcastNewsletter/ ?  MSDN免费中文速递邮件 (MSDN  Flash)
    http://msdn2.microsoft.com/zh‐cn/flash ?  MSDN开发中心
http://msdn2.microsoft.com/zh‐cn/developercenters
?  MSDN图书中心
http://www.microsoft.com/china/msdn/book

Question & Answer
    如需提出问题,请在此区域输入文字,并单击 “问题和解答”右上方的“提问”按钮即可。
您也可以选择在微软中文技术论坛上寻求帮助,MSDN中文网络 广播的讲师们会定期在论坛上为大家解答与课程相关的技术问题。
http://forums.microsoft.com/china