Webアプリを開発しておりますが、度々デッドロックが発生します。
毎度ではありませんのでタイミングによって発生するものと思われます。
原因を調べておりますが特定に至らず皆様に質問させて頂きます。
開発環境
IIS
ASP.NET
C#
SQLServer
SQLServer Profiler
デッドロック時の情報です。
左側はSELECTでテーブル[HSH20]を含む複数テーブルを結合して複数行を取得
右側はINSERT(DataAdapter)でテーブル[HSH20]に複数行を挿入
※こちらはProfilerにてSQLが表示されたため特定できました。
分離レベルとロック
分離レベル
Read Committed
SELECT文
指定無し(共有ロック?)
INSERT文
実際はDataAdapterが処理してINSERT or UPDATEを決めると思われるので
事前に更新対象データを検索して更新ロック[UPDLOCK]を付けてSELECTしています。
実施したこと
発生当時に使用されていたインデックス(Index Name)が
どちらもクラスタ化インデックス(主キーのみ)を使用していたので
SELECT文に合わせて非クラスタ化インデックス(IDX_HSH20_02)を作成しましたが
前述したProfilerの通り、解決には至りませんでした。
有識者の方にご教示頂きたいのですが、不足している情報もあるかと思いますので
その際は記載頂ければ必要な情報を提示致します。
どうぞよろしくお願い致します。