SQL Serverデータベースのさまざまな構成を試し、最終的にREAD_COMMITTED_SNAPSHOT
to ON
while ALLOW_SNAPSHOT_ISOLATION
はOFF
です。
これを有効にすると、多くのクエリが大幅に速くなることに気付きました。私はまだデフォルトを使用していますREAD COMMITTED
データベースに接続するための分離レベル。
実際にここで何が起こっているのでしょうか?ALLOW_SNAPSHOT_ISOLATION
はOFF
で、設定READ_COMMITTED_SNAPSHOT
to ON
は効果がありません...私はまだ実際にスナップショットアイソレーションを使用していません、または私ですか?誰かが説明してくれませんか?よくわかりません。
このトピックをオンラインで調べてみましたが、いつでもREAD_COMMITTED_SNAPSHOT
が使用されているため、常にALLOW_SNAPSHOT_ISOLATION
、有効にしませんでした。
これを有効にすると、多くのクエリが大幅に速くなることに気付きました。私はまだデフォルトを使用しています
READ COMMITTED
データベースに接続するための分離レベル。
ダン これに注意:
オプションは独立しており、両方をオンにする必要はありませんが、多くは誤ってオンにします。どちらかをオンにすると、行のバージョン管理のオーバーヘッドが発生します。
READ_COMMITTED_SNAPSHOT ON
はすべてを引き起こすREAD_COMMITTED
セッションをロックする代わりに行のバージョン管理を使用することで、ブロックを回避し、パフォーマンスの向上を認識できるようにします。
加えて、 READ_COMMITTED_SNAPSHOT
(以降、RCSIと呼ばれます)は、楽観的同時実行のいくつかのプロパティのみを提供します。 RCSIとスナップショット(SI)は、主に3つの点で異なります。
ここで実際に何が起こっていますか?
RCSIがオンになっているため、すべてのRC分離クエリがRCSIに昇格され、リーダーはライターをブロックせず、ライターはリーダーをブロックしません。表示されている「スピードアップ」は、ブロックと待機の代わりにオプティミスティック並行性のバージョンストアを使用しているため、これらのクエリのブロックの待機が減少したことが原因であると考えられます。これにより、クエリで望ましい結果が得られる場合と得られない場合があります。
ALLOW_SNAPSHOT_ISOLATION
はOFF
で、設定READ_COMMITTED_SNAPSHOT
toON
は効果がありません...私はまだスナップショットアイソレーションを実際に使用していませんか、それとも私ですか?
上記を参照。 RCSIがオン(実際にオンにしたもの)のときに使用していますが、SIはオンのときに自動的には使用されません。明示的にSET TRANSACTION ISOLATION LEVEL SNAPSHOT
(または同等のもの)を使用してSI。
詳細については、製品ドキュメントの SQL Serverデータベースエンジンの行バージョン管理ベースの分離レベル を参照してください。
RCSI/SIを使用する際の注意点と警告に関するその他の有用な詳細については、次の記事を参照してください。