この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 28055|答える: 3

[出典] SQL Serverマルチバージョン同時実行制御

[リンクをコピー]
掲載地 2021/01/28 17:55:52 | | |
データベースの整合性もDBMSのパフォーマンスを測定する重要な指標の一つです。 現在、ほとんどの商用データベース(DB2、SQL Server)は並行制御に二段階ロッキング(2PL)プロトコルを使用しており、同時トランザクション実行の直列化が保証されています。 しかし、2PLは読み書きを行う前にデータをロックする必要があります。 ブロッキング互換性行列において、Sロック(シェアロック)とXロック(排他的ロック)は互換性がないため、トランザクション1がデータA(およびSロック)に対して読み込み操作を行い、トランザクション2がデータに書き込みたい(Xロックを追加)する場合、トランザクション2はトランザクション1がデータAのSロックを解除するのを待ってから先に進まなければなりません。 マルチバージョン同時処理制御(MVCC)はこの問題をうまく解決します。 マルチバージョンシステムでは、書き込みデータごとに新しいバージョンが生成され、読み取り操作は必要に応じて適切なバージョンを読み取ることで、読み書き操作が互いに妨げ合うことはありません。 MVCCは並行性を高めますが、同時に複数のバージョンを維持するためのストレージオーバーヘッドも生じます。

Microsoft SQL Serverデータベースエンジンは、既存のトランザクション隔離レベルの新しい実装であるコミットリードを導入し、行バージョン管理を用いて文レベルのスナップショットを提供します。 SQL Serverデータベースエンジンは、トランザクション分離の新たなレベルであるスナップショットを導入し、行のバージョン管理も使用するトランザクションレベルのスナップショットを提供します。

READ_COMMITTED_SNAPSHOTデータベースオプションをONに設定すると、行バージョン管理を用いてコミットされた読み取り分離が可能になります。 ALLOW_SNAPSHOT_ISOLATIONデータベースオプションをONに設定すると、スナップショット分離が可能になります。 どちらかのオプションがデータベースで有効になると、データベースエンジンは修正された各行のバージョンを保持します。 トランザクションが行を変更するたびに、修正前の行のイメージがバージョンストアのページにコピーされます。 バージョンストアとは、tempdbにおけるデータページの集合体です。 複数のトランザクション修正ラインがある場合、そのラインの複数のバージョンがバージョンチェーンでリンクされます。 行バージョン管理を用いた読み取り操作は、トランザクションや文の開始時にコミットされた各行の最終バージョンを取得します。

SQL Server 2008向けに書かれた、またはSQL Serverに新規対応されたアプリケーションでは、READ_COMMITTED_SNAPSHOTデータベースオプションがONの場合にトランザクション分離レベルを指定することで、行バージョン管理を用いて読み取りコミットの隔離を実装します。 すべてのリードは、文が始まったときにコミットされた行バージョンを確認します。 これにより、文レベルのスナップショットが得られます。

SQL Server向けに書かれたアプリケーションは、ALLOW_SNAPSHOT_ISOLATIONデータベースオプションがONのときにスナップショットのトランザクション分離レベルを指定することでスナップショット分離を実装します。 スナップショットトランザクションのすべての読み取りは、トランザクション開始時にコミットされた行のバージョンを確認します。 これにより、トランザクションレベルのデータのスナップショットが得られます。

行ベースの隔離レベルを使用するトランザクションでは、読み取りはデータに対して共有ロックを要求しません。 つまり、行バージョン管理を行っているリーダーは、他のリーダーやライターが同じデータにアクセスすることを妨げません。 同様に、作家は読者の邪魔をしません。 しかし、ライター同士は(行のバージョン設定に基づく隔離状態でも)お互いに邪魔をします。 2つの書き込み操作は同時に同じデータを変更することはできません。

スナップショット隔離機能は、SQL Server 2008のロックフレームワークを拡張し、アプリケーションがデータ変更が行われる前に値を閲覧できるようにします。 これにより、アプリケーションがロックされるのを防ぎつつ、真に提出されたデータを提供できます。 SQL Server 2008のRead Committed Snapshotは、データベース管理者の有効化を必要とし、読み取り専用トランザクションでデータを読み取ることを可能にします。 したがって、SIの読み取り専用トランザクションの並行制御は非常に優れていますが、更新トランザクションに関してもそれが当てはまるかは不明です。 長期的な更新トランザクションが短期的な高水準トランザクションと競合するのは不利です。 データベース間のトランザクションがすべてのデータベースを設定するのではなく、スナップショット分離(SI)標準を使おうとすると、トランザクションは失敗します。 これは間違いなくスケーラビリティにいくつかの障壁を生み出します。 MicrosoftがSQL 92仕様よりも強力な独自のSIを実現するにはまだ長い道のりがあるようです。

変更前に前のバージョンのコピーを作成し、その後のすべての読み取り操作でコピーされたバージョンを読み込み、修正によって新しいバージョンが作成されます。 このようにして、読み書き操作はお互いにブロックし合いません。 このラインバージョン管理機構の利点は、プログラムの同時実行性が比較的高いことですが、欠点として、ユーザーはダーティデータを読み取らないものの、そのデータ値は変更されていて期限切れ間近である場合があります。 この期限切れの値に基づいてデータを変更すると、論理エラーが発生します

SQLコマンド:


参考リンク:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。





先の:Elasticsearch(ES)はクローンインデックスを再現します
次に:Cubase10.5チュートリアル
掲載地 2021/01/29 9:13:40 |
雪西
掲載地 2021/07/15 20:37:16 |
欲しい、欲しい、欲しい、欲しい欲しい
掲載地 2021/12/12 1:22:12 |
欲しい、欲しい、欲しい
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com