13:43:17)追加された行はこの色です。削除された行はこの色です。.NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。Serverは参照処理にもロック(共有ロック)を~かけるということを知っておくことが重要。[#t4f727ff]ロックの種類は-DMLの種類-[[分離レベル>#f0ab9db5]]の指定によって変わってくる。[#le819818]各ロックの互換性についても考慮が必要。エンジン)~http://msdn.microsoft.com/ja-jp/library/ms186396.aspxまた、指定された[[分離レベル>#f0ab9db5]]を実現するため、~トランザクション中のロックがホールドされるか?~・・・などで、ロックの動きが変わってくる。問題の分析方法]])も参考にできる。[#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-暗黙の型変換によるインデックス・スキャンによる、~インデックス・ロック(広範囲にロックがかかる)がある。統計情報が更新されていないと、~インデックス・シークが適用されず、~-インデックス・スキャン-テーブル・スキャンにより、広範囲にロックがかかることがある。オプティマイザ]]を参照にできる。[#lb9591d0]**適切な[[分離レベル>#f0ab9db5]]を選択する。[#i5623668]**MVCCに変更する。Server2005から、動作を[[MVCC>DBMSのロック・分離戦略と同時実行制御#we9e7704]]に変更することも可能。**エスカレーションを抑止する。ロックのエスカレーション]]の発生を抑止できる。**ロックをカスタマイズする。(ROWLOCK)などと指定する。パターンが一定していることがわかっている場合、~ページまたは行のロックを禁止することが効果的なケースもある。[#a1170e91]**こんな単純なSQLでもブロッキングになる。Control:MVCC)>DBMSのロック・分離戦略と同時実行制御#z1614545]]のDBMSに慣れると、~驚くことになるが、以下の非常に簡単な2つのトランザクションで、ブロッキングが発生する。[#hc7510b8]ポイントは、後発の参照処理が、インデックスをキー範囲ロックしようとしている点。オプティマイザ]]、~主キーでのSELECTが、主キーのキー範囲ロックになってしまい、~他の排他ロック(INSERTやDELETEを含む)にブロッキングされる。」というケースもあった(本番環境では再現せず)。**逆に、これでブロッキングしない。[#f1f70626]使用するインデックスが異り、ブロッキングしなくなる。使用するインデックスが、-主キーの「クラスタ化インデックス」-複合インデックスの「非クラスタ化インデックス」と、使用するインデックスが異り、ブロッキングしなくなる。