.NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。Serverは参照処理にもロック(共有ロック)を~かけるということを知っておくことが重要です。ロックの種類は-DMLの種類-分離レベルの指定によって変わってきます。(ただし、DDLによるロックもある)~各ロックの互換性についても考慮が必要です。エンジン)~http://msdn.microsoft.com/ja-jp/library/ms186396.aspxまた、指定された分離レベルを実現するため、~トランザクション中のロックがホールドされるか?~・・・などで、ロックの動きが変わってきます。問題の分析方法]])も参考にして下さい。[#j73ca180]以下のSQLで、-トランザクションを開始し-参照処理することでロックをホールドしておきます。タイムアウト値を設定する方法は以下のとおりである。この設定は、接続確立毎に実行する必要がある。タイムアウト値を調べるには、次に示す@@LOCK_TIMEOUT関数を実行する。タイムアウトはデータプロバイダに設定する。--値の設定方法は、データプロバイダ毎に個別となる。タイムアウトが発生した場合、~そのタイムアウトがロックによるものか、コマンドによるものかを切り分ける必要がある。タイムアウトであるかを切り分けることが出来る。タイムアウトであった場合は、以下のHPにある方法でロック状況を確認すると良い。Serverで「デッドロック」を回避する~http://www.atmarkit.co.jp/fnetwork/rensai/sql28/sql1.html--以下はロック状況を確認するsp_lock_detailストアドプロシージャの作成スクリプトをコピペ利用可能にしたもの。--このsp_lock_detailストアドプロシージャは、次の1ステートメントで実行可能である。Server】ロック一覧を表示する~http://cloudyheaven.blog130.fc2.com/blog-entry-49.htmlで紹介されているSQLを使用できそうです。Northwindの所にはDB名を入力する。[#kf22be05]上記の「エンティティID」をCASEを使って自己解決するバージョンです。[#c295bf32][[SQLトレース>SQLプロファイラ(SQLトレース)]]を取って問題を起こしているSQLを確認できます。~以下の様な問題に起因していることが多いです。-スキャンにより広範囲にロックがかかる。-ロック・エスカレーションにより広範囲にロックがかかる。チェーンは基本的に直ちに検出されるので、~プログラミングにおけるデッドロックのように、~ハングアップ(ロック・タイムアウト)にはなりません。ロック待ち~http://www.shoeisha.com/mag/windev/pdf/870602/windev0602_129_SQLServer.pdf-暗黙の型変換によるインデックス・スキャンによる、~インデックス・ロック(広範囲にロックがかかる)があります。統計情報が更新されていないと、~インデックス・シークが適用されず、~-インデックス・スキャン-テーブル・スキャンにより、広範囲にロックがかかることがあります。オプティマイザ]]を参照して下さい。*こんな単純なSQLでもブロッキングになる。Control:MVCC)>DBMSのロック・分離戦略と同時実行制御#z1614545]]のDBMSに慣れてしまうと、~驚くことになりますが、以下の非常に簡単な2つのトランザクションで、ブロッキングが発生します。TRANSACTIONポイントは、後発の参照処理が、インデックスをキー範囲ロックしようとしている点です。オプティマイザ]]、~主キーでのSELECTが、主キーのキー範囲ロックになってしまい、~他の排他ロック(INSERTやDELETEを含む)にブロッキングされる。」というケースもありました(本番環境では再現せずでした)。Serverの動作をMVCCに変更することも可能>DBMSのロック・分離戦略と同時実行制御#we9e7704]]です。