ロックの基礎
Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) のロックについて理解するには、ロックできるリソースと、リソースをロックするために使用できる各種モードについて詳しく知る必要があります。
ロックの粒度
ロックの粒度とはロックが発生するレベルのことで、以下の種類があります。
- 行
- テーブル
- ページ
- データベース
細かい粒度 (行レベルなど) でロックを行うと同時実行性が向上しますが、ロックする行が多い場合はその分多くのロックを保持する必要があります。粗い粒度 (テーブル ロックなど) でロックを行うと、テーブル全体がロックされ、そのテーブルのあらゆる部分で他のトランザクションからのアクセスが制限されるので、同時実行性は低下します。ただし、テーブル レベルのロックを使用すると、保持しなければならないロックの数を抑えられます。
SQL Server Compact 3.5 の既定では、データ ページには行レベルのロックが使用され、インデックス ページにはページ レベルのロックが使用されます。
次の表は、SQL Server Compact 3.5 でロックできるリソースを示しています。
ロック | 説明 |
---|---|
RID |
行識別子。テーブル内の任意の 1 行をロックするために使用します。 |
PAG |
データ ページまたはインデックス ページ。 |
TAB |
すべてのデータとインデックスを含むテーブル全体。 |
MD |
テーブル メタデータ。テーブル スキーマを保護するために使用します。 |
DB |
データベース |
ロック モード
ロック モードによって、同時実行のトランザクションがデータにアクセスできる方法が決まります。SQL Server Compact 3.5 では、ロックする必要があるリソースと実行する必要がある操作を基に、どのロック モードを使用するかが決定されます。
次の表は、SQL Server Compact 3.5 でサポートされるロック モードを示しています。
ロック モード | 説明 |
---|---|
共有 (S) |
読み取りアクセス用のリソースを保護します。共有 (S) ロックがリソースに存在する間、他のトランザクションはデータを変更できません。 |
排他 (X) |
挿入、更新、削除などのデータ変更のことです。同一のリソースに同時に複数の更新を行えないようにします。 |
更新 (U) |
一般的な形式のデッドロックを禁止します。あるリソースに対する U ロックを取得できるのは、一度に 1 つのトランザクションのみです。トランザクションの結果としてリソースが変更された場合、U ロックが X ロックに変換されます。 |
スキーマ |
テーブルのスキーマに依存する操作を実行するときに使用します。スキーマ ロックには、スキーマ変更 (Sch-M) とスキーマ安定性 (Sch-S) の 2 種類があります。 |
インテント |
ロックの階層を確立します。インテント ロックの最も一般的な種類として、IS、IU、IX があります。下位階層のリソースの (すべてではなく) 一部でトランザクションが動作していることを示します。下位のリソースには、S、U または X ロックが適用されます。 |
重要 : |
---|
既定の分離レベルである Read Committed を適用する場合、SQL Server Compact 3.5 の SELECT ステートメントではデータの読み取りに S ロックは必要ありません。Microsoft SQL Server では S ロックは必要ですが、SQL Server Compact 3.5 では S ロックで強制的に Read Committed を指定する必要はありません。SELECT ステートメントに必要なロックは、操作の実行中にスキーマを保護する Sch-S のみです。そのため、SELECT ステートメントは非常に高い同時実行性を持っています。詳細については、「トランザクション分離レベル」を参照してください。 |
参照
概念
ロック (SQL Server Compact)
ロックについて
ロックのカスタマイズ