コミットされた読み取りスナップショット分離(RCSI)で取得された共有ロック


9

LCK_M_SRCSIを使用すると、共有ロックの待機()が発生します。私の理解では、SELECTsRCSIを使用するときに共有ロックを必要としないため、これは発生しないはずです。

共有ロックを確認するにはどうすればよいですか?外部キーが原因ですか?


read_committed_snapshotがオンになっている場合でも、インデックスがない場合、SQLサーバーはレコードに共有ロックを設定しますか?
grassbl8d 2013

回答:


13

共有ロックを確認するにはどうすればよいですか?外部キーが原因ですか?

はい。SQL Serverは、外部キー制約を検証する目的でテーブルにアクセスすると、読み取りコミット分離レベルのロック実装に戻ります。これは正確さのために必要であり、無効にすることはできません。

この動作は、データ変更ステートメントにのみ適用されます。共有ロックは、外部キー関連のデータをチェックするときにのみ使用されます。同じ実行プランの他のデータアクセスでは、引き続き行のバージョン管理を使用できます。

SQL Serverがこれを行わなかった場合RCSI、整合性チェックで古い(バージョン管理された)データが使用されたため、データ変更ステートメントが外部キー制約に違反する可能性があります。

残念ながら、現在、実行プランのロック動作のこの変更を確認するためのサポートされている方法はありません。トレースフラグ8607がアクティブな場合、内部ロックのヒントを表示できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.