ロック (SQL Server Compact)
データがロックされている場合、複数のユーザーまたはアプリケーションが同時に同一のデータにアクセスしたときに、データに対して同時に変更が行われないようになります。ロックは、Microsoft SQL Server Compact 3.5 データベース エンジン で内部的に管理されます。ロックは、ユーザーの操作に応じて、自動的に取得および解放されます。
ロックを使用していない場合に、複数のユーザーが同じデータを同時に更新すると、データベース内のデータは論理的に正しくなくなる可能性があります。このような場合、そのデータに対して実行されたクエリが予期しない結果を生じることがあります。
アプリケーションが直接ロックを要求することはありません。代わりに、トランザクションが開始し、トランザクション内でクエリ言語、データ操作言語 (DML)、またはデータ定義言語 (DDL) のコマンドが実行されたときに、SQL Server Compact 3.5 によって必要なすべてのリソースがロックされます。このことにより、必要な分離レベルでリソースを保護することができます。
SQL Server Compact 3.5 では、すべてのリソースに対して、ロックを許可および解放するタイミングが自動的に決定されます。既定では、行レベルのロックがデータ ページに使用され、ページ レベルのロックがインデックス ページに使用されます。システム リソースを保持するために、ロック マネージャでは、行ロック数の構成可能なしきい値を超えた時点で、ロックのエスカレーションが自動的に実行されます。ロック マネージャで各セッションに割り当てることができるロックの最大数は 262143 です。
一部の操作では、ロックの粒度を変更することができます。ロックの粒度を変更すると同時実行に悪影響を与える可能性があるので、注意してください。
SQL Server Compact 3.5 では、以下のリソースをロックできます。
行
4 KB のデータ ページまたはインデックス ページ
テーブル スキーマ
テーブル
データベース
細かい粒度 (行レベルなど) でロックを行うと同時実行性が向上しますが、ロックする行が多い場合はその分多くのロックを保持する必要があるので、オーバーヘッドが大きくなります。粗い粒度 (テーブル ロックなど) でロックを行うと、テーブル全体がロックされ、そのテーブルのあらゆる部分で他のトランザクションからのアクセスが制限されるので、同時実行性は低下します。ただし、このレベルのロックでは、保持するロックが少ないので、オーバーヘッドは小さくなります。
このセクションの内容
トピック |
説明 |
---|---|
SQL Server Compact 3.5 でのロックの基本情報について説明します。 |
|
sys.lock_information ビューによって返される情報について説明します。 |
|
ロックをカスタマイズする方法について説明します。 |