0

有一个奇怪的问题。我正在测试一个我编写的通过 AJAX 查询 SQL 服务器的 ASP.NET 应用程序。该应用程序正在使用 LINQ-to-SQL 从连接中的大约 8 个左右的表中加载数据,并且每隔一段时间,对 SQL 服务器的调用就会锁定并且永远不会返回。

我的第一个想法是它陷入了僵局,但根据我的阅读,如果发生这种情况,SQL Server 应该选择杀死一个有问题的线程。在这个应用程序的情况下,也没有任何其他用户访问数据库,所以我不明白这可能是什么问题。

其他症状:

  1. 执行此调用时,服务器上的处理器使用率会达到 40% 左右,并保持在那里,即使在应用程序关闭后(在 Visual Studio 中为“已停止”)。

  2. 服务器继续执行调用,直到我真正去杀死托盘中的 Visual Studio Web 服务器 (Cassini)。

  3. 查看 SQL 服务器在做什么时,我们只能看到它正在执行 LINQ-to-SQL 调用,没有什么异常。

有人对这种“气味”有什么想法吗?

谢谢,山姆

4

2 回答 2

1

首先,将您的 sql 服务器更新到最新的服务包级别。您可能想查看自该服务包以来发布的累积更新,看看是否有任何听起来像您的特定问题。可能已经解决了。

SQL Server 将选择杀死死锁中的项目之一,但这也取决于查询超时设置是什么。如果您的超时时间足够长(300 秒...),SQL Server 可以继续执行调用一段时间。

如果可能,您可以在 sql 调用中对表使用 NOLOCK,以便它是非阻塞选择。对于 Linq-To-Sql,将 Transaction Isolation 级别设置为 Read Uncommitted,与 NOLOCK 相同。

我会进一步跟踪 linq-to-sql 调用,并在 sql profiler 中重新运行它们,看看是否有一些可以调整得更好的东西,比如更好的索引等。

于 2010-01-06T15:25:58.990 回答
0

如果事务开始但从未完成,我在 linq 中看到了类似的行为。

于 2010-02-26T05:16:57.380 回答