分離レベル
トランザクション制御メカニズムとしてロックを使用すると、同時実行の問題を解決できます。つまり、複数のトランザクションが存在する場合でも、すべてのトランザクションを互いに完全に分離したトランザクションとして同時に実行できます。トランザクションが一貫性のないデータを受け入れるレベルを分離レベルといいます。分離レベルを高くすれば、データの一貫性が損なわれるのを回避できますが、代わりに同時実行性が低下します。
Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) では、アプリケーションに必要な分離レベルによって、SQL Server Compact Edition で使用されるロック動作が決まります。
SQL Server Compact Edition は、以下の分離レベルをサポートしています (分離レベルの低い順に記述)。
- Read Committed (SQL Server Compact Edition の既定値)
- Repeatable Read
- Serializable (トランザクションは互いに完全に分離されます)
分離レベルが高くなるにつれて、データは一貫性の損失から保護される度合いが高くなります。ただし、トランザクションの同時実行性が低くなるので、マルチユーザー アクセスに影響します。
メモ : |
---|
SQL Server Compact Edition では、1 つのトランザクションでデータをまだコミットしていない場合、他のトランザクションでそのデータを読み取ること (ダーティ リード) はできません。ここでは、ページ バージョン管理メカニズムを使用することにより、ユーザーが S ロックを要求しなくてもデータを読み取れるようになっています。このメカニズムでは、読み取り (SELECT) 操作の例外的な同時実行が提供されます。 |
分離レベルと同時実行の問題
次の表は、分離レベルとそのレベルで解決される同時実行の問題の一覧です。
メモ : |
---|
発生する可能性のある同時実行の問題には、非コミット依存、不一致分析、およびファントム読み取りがあります。同時実行の問題の詳細については、「同時実行」を参照してください。 |
分離レベル | 非コミット依存 (ダーティ リード) | 不一致分析 (反復不能読み取り) | ファントム読み取り |
---|---|---|---|
Read Committed |
× |
○ |
○ |
Repeatable Read |
× |
× |
○ |
Serializable |
× |
× |
× |
分離レベルは、プログラム、または SQL 構文 SET TRANSACTION ISOLATION LEVEL を使用して設定できます。詳細については、「トランザクション分離レベル」を参照してください。
参照
概念
トランザクション (SQL Server Compact Edition)
ロック (SQL Server Compact Edition)
カーソル (SQL Server Compact Edition)