2

我一直在使用 SharpArchitecture 和 NHibernate 来构建我的网站,它可以有很多用户。我的表在数据库设置中使用主键设置为 IDENTITY(1,1)。最近几天,我注意到基于日志文件发生的一堆死锁问题,如下所示:

System.Data.SqlClient.SqlException: Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

我有时会收到此错误,这可能与此有关:

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

在我的 web.config 中,我包含了这一行来设置 db 隔离属性:

<property name="connection.isolation">ReadUncommitted</property>

根据我通过搜索发现的内容,自动递增的 ID 正在锁定表,即使我已经 ReadUncommitted。话虽如此:

  • 我对这个结论正确吗?
  • 如果是这样,我假设如果我使用 HiLo 或 GuidComb 之类的东西生成 ID,它会解决问题吗?

谢谢!

4

1 回答 1

1
  • 可能是
  • 是的

与许多用户相比,HiLo 还可以减少数据库的流量和负载,因此无论如何切换到它都会很好。

于 2012-10-19T08:44:27.067 回答