2

可能重复:
SQL Server 2005 中的活动监视器问题

我的数据库服务器上运行了一些进程,这些进程占用了大量的 CPU。当我查看有关该过程的详细信息时,我得到:

set transaction isolation level  read committed

其他细节包括:

  • 状态:睡觉
  • 未结交易:0
  • 命令:等待命令
  • 登录时间:12 小时前
  • 最后一批:不到 2 分钟前

我最近没有看活动监视器,但是当我从服务器管理员那里得到消息说 CPU 运行接近 100%,而 SQL Server 占大多数时,我很好奇。该命令来自不同的(网络)应用程序,但它们都没有真正使用过该代码。有些是用 Coldfusion 编写的,有些是用 .NET 编写的。

这个命令是由 SQL Server 生成的吗?

是什么原因造成的?

杀死这些进程是否安全?

4

3 回答 3

1

您之前问题的答案仍然适用:

不,SQL 不会自己运行语句。这些陈述来自网络应用程序。它们可能不会作为 SqlCommand 文本显式存在于您的应用程序中,但在您的代码和实际到达 SQL Server 的代码之间存在来自各种框架和 ORM 的数万行代码。一个简单的例子是 bening SqlConnection.Open() 它发送一个相当大的批处理来初始化会话设置,一个以设置事务隔离级别读取提交结束的批处理......

您是否可以杀死它们是不可能的,因为它们是您的应用程序。

于 2009-12-22T21:36:24.793 回答
0

同意 Remus Rusanu 的观点,但只是为了澄清您的确切问题:“设置事务隔离级别读取已提交”不是“过程”。这是一个声明,它规定了如何处理来自您的应用程序的声明。

这就是说查询作为会话的一部分运行(在 ColdFusion 的情况下,任何特定的 cfquery,除非它们在 cftransaction 中)只会读取提交的数据。您可能会注意到,如果您使用 cftransaction,您会看到不同的事务隔离级别,它允许查询读取本地未提交的数据。

于 2009-12-23T12:40:30.057 回答
0

你能给我们提供更多信息吗?

该命令仅将事务的隔离级别设置为在事务启动之前读取已提交,并且不是问题的原因。

我建议您尝试使用 SQL 分析器来确定原因。设置过滤器时要小心,以防收到大量交易。

于 2009-12-22T21:34:14.953 回答