2

多くのユーザーを持つことができるサイトを構築するために、NHibernate で SharpArchitecture を使用しています。私のテーブルは、データベース設定の主キーを 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>

私の検索結果によると、ReadUncommitted があるにもかかわらず、自動インクリメントされた ID がテーブルをロックしています。そうは言っても:

  • 私はこの結論で正しいですか?
  • もしそうなら、HiLo や GuidComb のようなもので ID を生成すれば、問題は解決すると思いますか?

ありがとうございました!

4

1 に答える 1

1
  • おそらくそうだ
  • はい

多くのユーザーがいる場合、HiLoはデータベースのトラフィックと負荷も減らすので、とにかくそれに切り替えるのは良いことです。

于 2012-10-19T08:44:27.067 に答える