了解 ADO.NET“连接生命周期”

问题描述 投票:0回答:1

我遇到过一个高流量应用程序,它偶尔会遇到我试图诊断的各种扩展超时问题。该应用程序在 SQL 连接字符串中具有以下设置:

Min Pool Size=5;Max Pool Size=100;Connect Timeout=8;Connection Lifetime=30;

这当然意味着池中始终至少有 5 个连接,PerfMon 已确认。

但是如果我正确理解了 Microsoft 文档,连接生命周期设置将破坏任何已存在超过 30 秒的关闭连接

当一个连接返回到池中时,它的创建时间是 与当前时间相比,如果出现以下情况,连接就会被破坏 该时间跨度(以秒为单位)超过 Connection 指定的值 一生。

由于这 5 个(或更多)连接被不断使用,我是否认为它们中没有一个可以存活超过 30 秒?因此,每隔半分钟左右,我的应用程序就会一路返回 SQL 来握手 5 个以上的全新连接?

PerfMon 建议连接数永远不会低于 5,因此我没有证据表明发生了上述情况(除非它在视觉上是即时的)。难道我理解错了?

此外,这篇古老的文章确认生命周期检查仅在 Close() 上执行,因此此设置对于解决任何连接泄漏没有好处?

c# sql .net ado.net connection-pooling
1个回答
0
投票

这意味着无论生命周期如何,5 个连接都会保持活动状态,因为建立新连接比保持连接慢。超过最小池大小的所有其他连接将在给定连接生存期后被销毁。以下是回收工作原理的引用,以备您需要时使用

关于池化主题的整篇文章

如果已达到最大池大小并且没有可用连接,则请求将在数据提供程序中排队。数据提供程序等待可用连接的“连接超时”连接字符串选项的值返回到应用程序。如果该时间段到期且没有可用连接,数据提供程序将向应用程序返回错误。

© www.soinside.com 2019 - 2024. All rights reserved.