gpt4 book ai didi

c# - 为什么将我们的 .NET/SQL Server 网站移动到新主机会导致超过连接池大小?

转载 作者:行者123 更新时间:2023-11-30 12:17:52 25 4
gpt4 key购买 nike

我们最近将公司网站移到了新的主机上。它是一个带有 C# 代码的 ASP.NET 站点,连接到 MS SQL 服务器。

自从将站点移至新服务器后,该站点超出了连接池限制(未明确设置,因此我认为是默认大小 100)。通过 SQL Server Management Studio 检查打开的进程表明每个数据库调用似乎都处于打开状态,事实上,在代码中我根本找不到任何明确关闭的连接。

数据库连接的方式如下:

DSLibrary.DataProviders.SqlProvider db = new DSLibrary.DataProviders.SqlProvider(Defaults.ConnStr);

关于此 DSLibrary 的文档很少,我认为它是由网站的原始开发人员编写的库。 DSLibrary 的类成员似乎都没有显式关闭连接 - 它们也没有在 using block 中定义以自动关闭连接。

我的问题是 2 倍。

  1. 我们怎么会没有遇到这个问题是当网站在不同的主机近 3 年?有没有离开自动关闭我没有的未使用的连接在 SQL 服务器上实现?
  2. 我最好重写每一个连接和程序显式打开和关闭连接数据库?

更新最大并发连接数 属性(服务器属性 -> 连接选项卡)设置为 0。

如果我在我的开发机器上以 Debug模式运行网站,远程连接到生产数据库,那么连接似乎正确关闭。这似乎表明它与 IIS 的配置方式有关?

更新 2将应用程序池设置为在 30 个工作进程停止超过最大连接数的站点后进行回收,但现在限制了一些( session 持久)功能 - 最近访问的项目列表重置非常快并且尝试通过 cms 编辑任何内容是不可能的进程回收后立即注销...

最佳答案

您的代码很可能到处都是泄漏连接。

我敢打赌,您的旧主机将应用程序池设置为经常回收,无论是从内存使用还是#requests processed 点。新主机很可能有默认循环。

我的建议是首先将应用程序池设置为更频繁地回收。然后修复代码。无论是通过重构 DSLibrary(我猜这是自家种植的),还是通过简单地将其更改为 using 子句,只要您建立了数据库连接。

更新
还有一件事,更改 session 属性以使用 sql server作为后备存储,您不会在应用程序回收时丢失所有 session 信息。这将为您赢得更多时间。

关于c# - 为什么将我们的 .NET/SQL Server 网站移动到新主机会导致超过连接池大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com