【问题标题】:Fixing Connection Pool maxing out / Finding open connections to SQL Server修复连接池最大化/查找到 SQL Server 的打开连接
【发布时间】:2020-07-29 03:17:01
【问题描述】:

我从某人那里继承的旧网站有点麻烦。 它抛出有关连接池被最大化的错误。当它发生时,网站只会加载 HTML 而不会从数据库中加载任何内容。当它被放置一段时间后它会正常工作,或者当我在 Plesk 中回收 IIS 应用程序池时。

我已经做了很多阅读和研究,但我仍然无法完全解决。
我阅读的第一件事是查找在检索信息后数据库连接未关闭的任何代码。到目前为止,我还没有找到类似的东西。

接下来我发现了一个存储过程sp_who2,我被引导相信它会给我打开连接,但我有点困惑,这是否是我真正看到的。

运行 sp_who2 时,我得到以下信息。

这是一个开放的连接吗?还是只是我当前通过 SQL Server Management Studio 查看数据库的连接?

此数据库当前位于共享托管平台上,因此我没有运行我找到的其他一些命令所需的访问权限。

理想情况下,我会将网站移出共享主机,但我想在此之前找出原因。我希望找到的是需要调整代码以使其工作的地方。

【问题讨论】:

    标签: sql asp.net sql-server


    【解决方案1】:

    这是一个开放的连接吗?还是只是我当前通过 SQL Server Management Studio 查看数据库的连接?

    两者兼而有之。您的连接来自 SSMS,它是一个开放的连接。

    有很多方法可以获得比这更详细的信息。例如,您可以使用 sys.dm_exec_connections 以及其他 DMV,例如 sys.dm_exec_sessions,并构建一个可以告诉您大量信息的查询。

    但与其自己编写这样的查询,我建议你下载 Adam Machanic 的优秀 sp_whoisactive。它只是您创建的一个存储过程,其中包含一个从系统元数据中提取大量有用信息的查询,并能够提供自定义输出的选项。我可以肯定地说,这个过程是每个人最终用于此类查询的“默认”过程。我可能会不时针对 DMV 编写我自己的更有限的查询,但大多数时候,sp_whoisactive 可以为您提供所需的一切。

    例如,其中一个参数是@show_sleeping_spids。即使它们实际上没有运行任何查询,这也会向您显示连接。考虑到过程名称是“谁是 active”,这有点好笑,但它的用处是显而易见的。您可能希望像这样执行此过程:exec sp_whoisactive @show_sleeping_spids = 1,并且可能还添加其他参数。它也有强大的过滤选项,但如果您通常没有很多个连接,您可能只需获取整个输出并关注相关信息。

    如果由于共享主机提供给您的权限而无法运行此程序,那么您的选择将受到严重限制。如果您只是从sp_who2 获得自己的会话,但您知道其他东西正在运行,那么您没有view server state 权限。在这种情况下,sp_who2 只输出您自己的会话(因为您可以查看有关您自己的会话的信息)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多