【问题标题】:SQL CPU High - SqlConnection not being closed - Related?SQL CPU 高 - SqlConnection 未关闭 - 相关?
【发布时间】:2011-01-27 17:03:27
【问题描述】:

我有一个基于 ASP.net 的应用程序。

SQL Server 机器上的 CPU 一直在 ~90 - 100%

我目前正在处理许多无用的查询,但是,查看以前编码员的代码,他似乎从未关闭(或处置)SqlConnection

当我运行以下查询时,我得到大约 450 个“等待命令”的连接

选择计数(*) FROM MASTER.DBO.SYSPROCESSES 在哪里 DB_NAME(DBID) = 'CroCMS' AND DBID != 0 AND cmd = '等待命令'

这可能会导致问题吗?

我读过这篇文章,它似乎与以下内容有关: http://www.pythian.com/news/1270/sql-server-understanding-and-controlling-connection-pooling-fragmentation/

我们也遇到了很多超时,特别是在启用复制时.. 我不确定这是否相关..目前已禁用复制(事务性),看起来还可以.. (此服务器是我们办公室数据库服务器的订阅者)

处理 SQL 连接对象有帮助吗?

【问题讨论】:

    标签: c# sql-server performance sqlconnection


    【解决方案1】:

    是的,处理掉它们。否则暂时忽略它们。可能池一样大,因为语句很慢。我更建议:

    • 修复语句。
    • 检查每个请求只使用一个连接的应用程序(即不同时打开多个)。

    如果优化 SQL 后问题没有得到改善 - 您可以重新访问池。

    【讨论】:

      【解决方案2】:

      您应该始终在使用完命令对象后对其进行处置。这样可以更好地使用连接池。

      easy 是使用 using 语句。

      using (
                      var sqlCommand = new SqlCommand(
                          "storedprocname",
                          new SqlConnection("connectionstring"))
                          { CommandType = CommandType.StoredProcedure })
                  {
                // do what you should.. setting params executing etc etc. 
      
      }
      

      【讨论】:

      • 我相信这段代码是在创建一个连接,而不是处理它。 IE。首先创建 SqlConnection 并将其包装在“使用”中。
      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      相关资源
      最近更新 更多