我遇到过一个高流量应用程序,它偶尔会遇到我试图诊断的各种扩展超时问题。该应用程序在 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() 上执行,因此此设置对于解决任何连接泄漏没有有好处?
这意味着无论生命周期如何,5 个连接都会保持活动状态,因为建立新连接比保持连接慢。超过最小池大小的所有其他连接将在给定连接生存期后被销毁。以下是回收工作原理的引用,以备您需要时使用
如果已达到最大池大小并且没有可用连接,则请求将在数据提供程序中排队。数据提供程序等待可用连接的“连接超时”连接字符串选项的值返回到应用程序。如果该时间段到期且没有可用连接,数据提供程序将向应用程序返回错误。