ロック レベルと分離レベル
さまざまなデータベース システムによって、多様なロック レベルおよび分離レベルをサポートします。以下のトピックでは、ロック レベルおよび分離レベルについて、またこれらの設定が、取得するデータにどのように影響するかについて説明します。
ロック
ロックとは、ユーザーがデータベースのテーブルやレコードにアクセスするのを制限する処理です。複数のユーザーが同じテーブルやレコードに同時にアクセスする可能性がある場合に、ロックをかけます。テーブルやレコードをロックすると、一度に 1 人のユーザーだけがデータに影響する処理を行えるようになります。
ロック制御は、複数のユーザーが、データベースの同じレコードに同時にアクセスしたり変更する場合に特に重要です。複数のユーザーが同時に使えるデータベースは便利ですが、問題が発生することもあります。たとえば、ロックしていない場合、2 人のユーザーが同時に同じレコードを変更しようとすると、正確なデータが取得できなかったり、一方のユーザーが必要とするデータをもう一方のユーザーが削除してしまう可能性があります。しかし、いったん 1 人のユーザーがアクセスしたレコードを、他のユーザーが一時的に変更できないようにロックできるようにしておくと、このような問題は発生しません。ロックすることによって、データベースへの同時アクセスによる問題の発生を最小限に抑えることができます。
分離レベル
分離レベルとは、データの一貫性を高めるためにデータベース システムで採用される特別なロック方法です。分離レベルが高いほど、そのロック方法も複雑になります。データベースで使用される分離レベルによって、データの一貫性に関連する次の事象がトランザクションで発生するかどうかが決まります。
 
分離レベルとは、データベース システムで、上記の事象が発生するのを防げるかどうかを示すレベルです。ANSI(American National Standards Institute:米国規格協会)によって、次の 4 つの分離レベルが定められています
0 から 3 へとレベルが高くなるほど、トランザクションのデータの一貫性も高くなります。一番低いレベルでは、上の 3 つの事象がすべて発生する可能性があります。一番高いレベルでは、どの事象も発生しません。このような事象が発生するのを防げるかどうかは、各レベルで使う、次のようなロック方法によって決まります。
 
65 では各分離レベルにおいて発生するデータ一貫性の事象を示します。
 
分離レベルが高いほどデータの一貫性は高くなりますが、逆に、個々のユーザーの同時処理性は低くなります。同時処理とは、複数のユーザーが同時にデータにアクセスして変更することです。分離レベルが上がるに従って、使用されるロック制御が原因で、同時処理上の問題が発生する確率が高くなります。
検討事項:分離レベルが高くなるほどロック制御が厳しくなり、ユーザーが、別のユーザーによってかけられたロックが解除されるのを待つ時間が長くなります。分離レベルと同時処理性には、このような逆比例的な関係があるので、分離レベルを選択する前にユーザーがデータベースをどのように使用するか検討しておく必要があります。データの一貫性と同時処理性のどちらがより重要かを考慮して、使用する分離レベルを決めてください。
ロック モードとレベル
データベース システムによって使用するロック モードは異なりますが、通常、「共有ロック」と「排他ロック」という 2 種類の基本モードがあります。共有ロックでは、複数のユーザーが単一オブジェクトを参照することが可能です。1 人のユーザーがレコードに共有ロックをかけると、2 番目に同じレコードにアクセスしたユーザーも共有ロックをかけることができます。ただし、2 番目のユーザーは、そのレコードに排他ロックをかけることはできません。排他ロックとは、そのロックを取得したユーザーへの独占的な権利です。1 人のユーザーがレコードに排他ロックをかけると、2 番目のユーザーは、同じレコードにどの種類のロックもかけられなくなります。
データベース システムで使用するロック レベルは、パフォーマンスと同時処理性にも影響します。ロック レベルによって、データベース内でロックされるオブジェクトのサイズが決まります。たとえば、データベース システムの多くで、テーブル全体、および個々のレコードをロックすることができます。また、ページ レベルのロック(ロック レベルは中程度)もよく使われます。1 ページには 1 つまたは複数のレコードが入っていますが、これは通常、1 回のディスク アクセスでディスクから読み取られるデータの量です。ページ レベルのロックの大きな欠点は、1 人のユーザーがレコードをロックすると、同じページに保存されているほかのレコードを 2 番目のユーザーがロックできないことです。