データベース エンジンでの行のバージョン管理に基づく分離レベル
Microsoft SQL Server データベース エンジンでは、既存の分離レベルの Read Committed の実装が新しくなっています。この分離レベルでは、行のバージョン管理を使用して、ステートメント レベルのスナップショットが提供されます。また、SQL Server データベース エンジンには、スナップショットという新しいトランザクション分離レベルも導入されています。この分離レベルでは、行のバージョン管理を使用して、トランザクション レベルのスナップショットが提供されます。
行のバージョン管理を使用する Read Committed 分離は、READ_COMMITTED_SNAPSHOT データベース オプションを ON に設定することで有効になります。スナップショット分離は、ALLOW_SNAPSHOT_ISOLATION データベース オプションを ON に設定することで有効になります。データベースでいずれかのオプションが有効になっていると、データベース エンジンは各行の変更内容についてバージョン管理を行います。トランザクションによって行が変更されるたびに、その行の変更前のイメージがバージョン ストア内のページにコピーされます。バージョン ストアは、tempdb 内のデータ ページのコレクションです。複数のトランザクションで 1 つの行が変更されると、その行の複数のバージョンがバージョン チェーンで連結されます。行のバージョン管理を使用する読み取り操作では、トランザクションやステートメントが開始されるときに、各行のコミット済みの最新バージョンが取得されます。
SQL Server 2000 用に作成されたアプリケーション、または SQL Server 用に新しく作成されたアプリケーションでは、READ_COMMITTED_SNAPSHOT データベース オプションが ON に設定されているときに Read Committed トランザクション分離レベルを指定することで、行のバージョン管理を使用する Read Committed 分離が実装されます。すべての読み取り操作では、ステートメントの開始時にコミットされていた行のバージョンが表示されます。これにより、データのステートメント レベルのスナップショットが提供されます。
SQL Server 用に作成されたアプリケーションでは、ALLOW_SNAPSHOT_ISOLATION データベース オプションが ON に設定されているときにスナップショット トランザクション分離レベルを指定することで、スナップショット分離が実装されます。スナップショット トランザクションのすべての読み取り操作では、トランザクションの開始時にコミットされていた行のバージョンが表示されます。これにより、データのトランザクション レベルのスナップショットが提供されます。
行のバージョン管理に基づいて分離レベルを使用するトランザクションの場合、読み取り操作で、データに共有ロックをかけることは要求されません。つまり、行のバージョン管理を使用するリーダーでは、同じデータにアクセスする他のリーダーまたはライタがブロックされません。同様に、ライタによってリーダーがブロックされることもありません。ただし、行のバージョン管理に基づく分離レベルで実行されているときでも、ライタどうしは互いにブロックします。2 つの書き込み操作によって、1 つのデータを同時に変更することはできません。
次の表に、行のバージョン管理に基づく分離レベルの詳細について説明するトピックを示します。
トピック |
説明 |
---|---|
行のバージョン管理の概念について説明します。 |
|
行のバージョン管理の利点とコスト、および行のバージョン管理に最適なシナリオの推奨事項について説明します。 |
|
データベースでの行のバージョン管理を有効にするオプションについて説明します。 |
|
行のバージョン管理に基づく分離レベルの制限事項について説明します。 |
|
行のバージョン管理がシステムに及ぼす影響、およびデータベースやトランザクションでの行のバージョン管理状態に関する情報を返す DMV (動的管理ビュー) とパフォーマンス カウンタについて説明します。 |