【问题标题】:Activity Monitor Problems in SQL Server 2005SQL Server 2005 中的活动监视器问题
【发布时间】:2009-12-22 16:08:21
【问题描述】:

我正在查看 SQL Server 2005 的 Activty Monitor,我们有一些进程占用了大量 CPU。当我查看正在尝试运行的内容时,我得到:

set transaction isolation level  read committed 

此代码并非来自我们的任何应用程序。

是什么原因造成的?

应该怎么做?

【问题讨论】:

    标签: sql-server sql-server-2005 transactions cpu-usage activity-monitor


    【解决方案1】:

    查看 sys.dm_exec_sessionssys.dm_exec_connections 以获取占用 CPU 的会话 ID。您将找到客户端的应用程序名称、主机名和进程 ID。

    【讨论】:

    • 您可以从活动监视器中获取所有这些。我的问题是导致此 SQL 运行的原因是什么,因为它使用了过多的 CPU。以至于它引起了问题。
    • 那么,什么应用程序正在运行这些?您的问题的答案实际上取决于首先找出查询的来源,您不同意吗?他们是否是某种监控做的太紧的循环,他们是不是一些应用程序启动太多,请求是否比你发布的更多?
    • 问题是上面的 SQL 是从多个应用程序(所有 Web 应用程序)中显示的。但是,如问题所述,这些语句不在任何代码中。这是 SQL Server 可以做的事情吗?
    • 不,SQL 不会自己运行语句。这些陈述来自网络应用程序。它们可能不会作为 SqlCommand 文本显式存在于您的应用程序中,但在您的代码与实际到达 SQL Server 的代码之间存在来自各种框架和 ORM 的数万行代码。一个简单的例子是 bening SqlConnection.Open() 它发送一个相当大的批处理来初始化会话设置,一个以set transaction isolation level read committed... 结尾的批处理
    【解决方案2】:

    这是 ADO.NET 和大多数 OR/M 框架的默认事务隔离级别。很有可能这实际上是针对您的代码的,您只是不知道而已。

    无论如何,我认为这是一个错误的问题 - 真正的问题是,为什么这条相当常见的 TSQL 指令会导致您的数据库 CPU 达到峰值?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多