NHibernate SQL Server暂停进程

时间:2012-02-06 10:49:39

标签: .net sql-server-2005 nhibernate process locking

遇到了一个我希望有人可以帮我指点问题的问题。 在.NET 3.5和NHibernate 1.2上使用几年的应用程序。 过去一周,交易似乎随机锁定了一直存在问题。我注意到NH的command_timeout为100000.我现在把它降到了30,因为100000看起来很疯狂!问题仍然存在。

SQL Server活动监视器在问题发生时显示阻塞事务,通常处于SUSPENDED状态。如果我杀死阻止进程,那些被阻止的进程将被触发,系统就可以了。

运行检查阻塞过程,我可以看到正在执行的导致问题的大约SQL语句,但它是一个通过系统的大部分执行的语句,在大多数页面上检索公共数据。

我认为可能导致这种情况?没有什么明显的......我们确实发布了一些小改动,但是没有一个会产生这种影响。最近几乎同时安装了Windows更新/服务包。 SQL / .NET SP更新可能是导致此问题的原因吗?

我知道这里有很多东西,但我现在尽量多付出。

新信息: 现在command_tinmeout已更新为30秒,超过此执行时间的查询将自动终止 - 或者我在活动监视器中看到。然而,似乎还有其他事情正在发生,因为重复查询也会因超时而失败。但是,如果我停止并启动应用程序池,一切都会按照正常情况开始工作,至少会持续一段时间。

1 个答案:

答案 0 :(得分:1)

如果你说这是一个非常常见的查询,你认为它是阻塞的,那很可能是因为它是普遍执行的,因此最有可能是等待数据库锁定的那个。

数据库运行的隔离级别是什么,如果它的开箱即用设置,在大多数情况下,将其切换到快照隔离以避免读者等待编写者的性能非常可行。 More info on Snapshot isolation

考虑到导致这种情况的原因,也许您介绍了一些慢写查询,您的数据变大或者您的数据中存在大量碎片。