位置: 编程技术 - 正文

.NET Framework SQL Server 数据提供程序连接池

编辑:rootadmin
您也可以提供几个连接字符串修饰符来控制连接池行为,请参见本主题内下文中“使用连接字符串关键字控制连接池”这一节。池的创建和分配

当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。

在以下示例中,将创建三个新的 SqlConnection 对象,但只需要使用两个连接池来管理这些对象。请注意,第一个和第二个连接字符串的差异在于为 Initial Catalog 分配的值。

SqlConnection conn = new SqlConnection();conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";conn.Open(); // Pool A is created.SqlConnection conn = new SqlConnection();conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";conn.Open(); // Pool B is created because the connection strings differ.SqlConnection conn = new SqlConnection();conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";conn.Open(); // The connection string matches pool A.

连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。

连接的添加

连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。

当请求 SqlConnection 对象时,如果存在可用的连接,则将从池中获取该对象。若要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。

如果已达到最大池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,连接池管理程序通过重新分配连接来满足这些请求。对 Connection 调用 Close 或 Dispose 时,连接被释放回池中。

警告 建议使用完 Connection 后始终将其关闭,以便连接可以返回到池中。这可以使用 Connection 对象的 Close 或 Dispose 方法来实现。不是显式关闭的连接可能不会添加或返回到池中。例如,如果连接已超出范围但没有显式关闭,则仅当达到最大池大小而该连接仍然有效时,该连接才会返回到连接池中。注意 不要在类的 Finalize 方法中对 Connection、DataReader 或任何其他托管对象调用 Close 或 Dispose。在终结器中,仅释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,则不要在类定义中包含 Finalize 方法。有关更多信息,请参见垃圾回收编程。连接的移除

如果连接生存期已过期,或者连接池管理程序检测到与服务器的连接已断开,连接池管理程序将从池中移除该连接。请注意,只有在尝试与服务器进行通信后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。连接池管理程序会定期扫描连接池,查找已释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。

如果存在与已消失的服务器的连接,那么即使连接池管理程序未检测到已断开的连接并将其标记为无效,仍有可能将此连接从池中取出。当发生这种情况时,将生成异常。但是,为了将该连接释放回池中,仍必须将其关闭。

事务支持

连接是根据事务上下文来从池中取出并进行分配的。请求线程和所分配的连接的上下文必须匹配。因此,每个连接池实际上又分为不具有关联事务上下文的连接以及 N 个各自包含与一个特定事务上下文的连接的子部分。

当连接关闭时,它将被释放回池中,并根据其事务上下文放入相应的子部分。因此,即使分布式事务仍然挂起,仍可以关闭该连接而不会生成错误。这样,您就可以在随后提交或中止分布式事务。

使用连接字符串关键字控制连接池

SqlConnection 对象的 ConnectionString 属性支持连接字符串键/值对,这些键/值对可用于调整连接池逻辑的行为。

下表描述了可用于调整连接池行为的 ConnectionString 值。

名称默认值说明Connection Lifetime0当连接返回到池中时,将对它的创建时间和当前时间进行比较,如果时间间隔超过由 Connection Lifetime 指定的值(以秒为单位),则会毁坏该连接。在聚集配置中可以使用它来强制在运行服务器和刚联机的服务器之间达到负载平衡。

如果值为零 (0),则将使池连接具有最大的超时期限。

Connection Reset'true'确定在从池中移除数据库连接时是否将其重置。对于 Microsoft SQL Server 版本 7.0,如果设置为 false,将避免在获取连接时经历一个额外的往返过程,但必须注意的是连接状态(如数据库上下文)不会被重置。Enlist'true'当为 true 时,如果存在事务上下文,池管理程序将自动在创建线程的当前事务上下文中登记连接。Max Pool Size池中允许的最大连接数。Min Pool Size0池中维护的最小连接数。Pooling'true'当为 true 时,将从相应的池中取出连接,或者在必要时创建连接并将其添加到相应的池中。连接池的性能计数器

SQL Server .NET Framework 数据提供程序添加了几个性能计数器,它们将使您能够微调连接池特性,检测与失败的连接尝试相关的间歇性问题,并检测与对 SQL Server 的超时请求相关的问题。

下表列出了可以在“.NET CLR 数据”性能对象下的“性能监视器”中访问的连接池计数器。

计数器说明SqlClient: Current # pooled and non pooled connections当前池连接或非池连接的数目。SqlClient: Current # pooled connections当前所有池中与特定进程关联的连接的数目。SqlClient: Current # connection pools当前与特定进程关联的池的数目。SqlClient: Peak # pooled connections自特定进程开始以来所有池中的连接数峰值。请注意:此计数器只有在与特定进程实例关联时才可用。_Global 实例始终返回 0。SqlClient: Total # failed connects打开连接的尝试因任何原因而失败的总次数。注意 将 SQL Server .NET Framework 数据提供程序性能计数器与 ASP.NET 应用程序一起使用时,只有 _Global 实例是可用的。因此,性能计数器返回的值是所有 ASP.NET 应用程序的计数器值的总和。

推荐整理分享.NET Framework SQL Server 数据提供程序连接池,希望有所帮助,仅作参考,欢迎阅读内容。

.NET Framework SQL Server 数据提供程序连接池

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

对有自增长字段的表导入数据注意事项 对有自增长字段的表导入数据注意事项:1、把自增长字段暂时设置成非自增长的;导入数据成功后,再设置成自增长字段。2、导出、导入数据时,注

SQL Server导入、导出、备份数据方法 一、导出导入SQLServer里某个数据库1.在SQLServer企业管理器里选中要转移的数据库,按鼠标右键,选所有任务-备份数据库。2.备份选数据库-完全,目的备

sql server 临时表 查找并删除的实现代码 ifexists(select*fromtempdb..sysobjectswhereid=object_id('tempdb..#temp'))droptable#temp临时表可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在

标签: .NET Framework SQL Server 数据提供程序连接池

本文链接地址:https://www.jiuchutong.com/biancheng/348759.html 转载请保留说明!

上一篇:Sql 语句学习指南第1/2页(sql语句基础教程)

下一篇:对有自增长字段的表导入数据注意事项(自增字段必须是主键吗)

  • 离职员工奖金发放规定
  • 哪些企业可以出2.2证书
  • 小微企业企业所得税100万元以下减半征收怎么计算
  • 不含税的销售额乘以税率等于什么
  • 月初没报税可以领发票吗
  • 工资可以先计提不发吗
  • 增值税抵扣不够怎么解决
  • 特种设备电梯如何监管
  • 个税手续费返还属于政府补助吗
  • 个人所得税交税怎么交的
  • 采暖费报销发票
  • 企业的期间费用包括什么
  • 新公司第一个月报税怎么弄
  • 融资协议如何缴纳印花税
  • 小规模商业企业税率
  • 福利费不交个人所得税会怎么样
  • 填写a201030减免所得税优惠明细怎么填
  • 成立公司工会
  • 支付宝对公账户还款清零要多久
  • 年利率的计算公式(免利息税)
  • 营业外收入属于什么会计要素
  • mac 磁盘未能分区
  • 旅游公司开具的考察费怎么入账
  • 进项发票大过销项,退税只退13个点的增值税吗
  • 如果电脑中毒了,航佳进销存还能使用吗
  • 什么叫绝地求生
  • 浅谈财务风险的防范与控制
  • php23种设计模式
  • PHP:parse_ini_string()的用法_Filesystem函数
  • 会计结账时账户余额为零
  • 应收账款保理的作用有哪些
  • 汇总开具的运输发票
  • 个体工商户年报逾期怎么办
  • linux如何搭建
  • php二维数组按某个键值排序
  • 票据权利期限可以缩短吗
  • 快速上手:华硕路由器的wireguard服务器
  • readline只读一行
  • vuejs echarts
  • 缴纳增值税会计科目
  • 餐饮营改增什么时候开始的
  • 未开票收入增值税申报
  • 工伤报销计入什么科目
  • 突然收到电子退库收入
  • 收到房租的租金怎么做账
  • 本月冲红上月发票后的税款能抵减吗
  • 转账支付水电费
  • 计提坏账准备金是什么意思
  • 营改增后服务业账务处理
  • 筹建期发生的费用怎么申报
  • 基本建设费用的组成
  • 支付给劳务人员劳务费需缴纳印花
  • 预付账款的账务处理过程
  • 影响以前年度损益的科目
  • 销售酒怎么结转销售成本
  • 新办企业必须经过什么核准登记
  • win10安装完成后需要做哪些设置
  • WIN10系统硬盘设置
  • Win10预览版镜像
  • linux快捷命令
  • win8系统没有wifi
  • win102020h2版本
  • win10清理系统盘垃圾
  • linux常用命令chmod
  • win8.1 应用商店是不是不能用了
  • win10周年版
  • linux的虚拟终端有几个
  • Access to the path "LibraryUnityAssembliesUnityEngine.xml" is denied.
  • vue中使用ajax
  • javascript html5 canvas实现可拖动省份的中国地图
  • nodejs爬虫技术
  • unity behavior designer
  • Android 添加数据到本地Excel表
  • 燃气号如何查询
  • 辽宁省地税社保缴费基数
  • 企业所得税纳税申报表A类
  • 酒席发票
  • 苏州工业园区国资委
  • 为什么进了网页不能登录
  • 个人利息收入属于什么收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设