DBMS-同時実行制御

複数のトランザクションを同時に実行できるマルチプログラミング環境では、トランザクションの同時実行性を制御することが非常に重要です。同時トランザクションの原子性、分離、および直列化可能性を確保するための同時実行制御プロトコルがあります。同時実行制御プロトコルは、大きく2つのカテゴリに分類できます-

  • ロックベースのプロトコル
  • タイムスタンプベースのプロトコル

ロックベースのプロトコル

ロックベースのプロトコルを備えたデータベースシステムは、トランザクションが適切なロックを取得するまでデータの読み取りまたは書き込みができないメカニズムを使用します。ロックには2種類あります-

  • Binary Locks−データ項目のロックには2つの状態があります。ロックまたはロック解除されています。

  • Shared/exclusive−このタイプのロックメカニズムは、用途に基づいてロックを区別します。書き込み操作を実行するためにデータ項目に対してロックが取得された場合、それは排他ロックです。複数のトランザクションが同じデータ項目に書き込むことを許可すると、データベースが不整合な状態になります。データ値が変更されていないため、読み取りロックは共有されます。

利用可能なロックプロトコルには4つのタイプがあります-

単純なロックプロトコル

単純なロックベースのプロトコルにより、トランザクションは「書き込み」操作が実行される前にすべてのオブジェクトのロックを取得できます。トランザクションは、「書き込み」操作の完了後にデータ項目のロックを解除する場合があります。

ロックプロトコルの事前請求

事前請求プロトコルは、それらの操作を評価し、ロックが必要なデータ項目のリストを作成します。トランザクションは、実行を開始する前に、必要なすべてのロックをシステムに事前に要求します。すべてのロックが付与されている場合、トランザクションは実行され、すべての操作が終了するとすべてのロックが解放されます。すべてのロックが付与されていない場合、トランザクションはロールバックし、すべてのロックが付与されるまで待機します。

ツーフェーズロック2PL

このロックプロトコルは、トランザクションの実行フェーズを3つの部分に分割します。最初の部分では、トランザクションが実行を開始すると、必要なロックの許可を求めます。2番目の部分は、トランザクションがすべてのロックを取得する場所です。トランザクションが最初のロックを解放するとすぐに、3番目のフェーズが開始されます。このフェーズでは、トランザクションは新しいロックを要求できません。取得したロックのみを解放します。

2フェーズロックには2つのフェーズがあり、1つは growing、トランザクションによってすべてのロックが取得されている場合。第二段階は縮小しており、トランザクションによって保持されていたロックが解放されています。

排他的(書き込み)ロックを要求するには、トランザクションは最初に共有(読み取り)ロックを取得してから、それを排他的ロックにアップグレードする必要があります。

厳密な2相ロック

Strict-2PLの最初のフェーズは2PLと同じです。最初のフェーズですべてのロックを取得した後、トランザクションは正常に実行され続けます。ただし、2PLとは対照的に、Strict-2PLは使用後にロックを解放しません。Strict-2PLは、コミットポイントまですべてのロックを保持し、一度にすべてのロックを解放します。

Strict-2PLには、2PLのようにカスケードアボートはありません。

タイムスタンプベースのプロトコル

最も一般的に使用される同時実行プロトコルは、タイムスタンプベースのプロトコルです。このプロトコルは、タイムスタンプとしてシステム時刻または論理カウンターのいずれかを使用します。

ロックベースのプロトコルは、実行時にトランザクション間の競合するペア間の順序を管理しますが、タイムスタンプベースのプロトコルは、トランザクションが作成されるとすぐに機能し始めます。

すべてのトランザクションにはタイムスタンプが関連付けられており、順序はトランザクションの経過時間によって決定されます。0002クロック時間に作成されたトランザクションは、それ以降に発生する他のすべてのトランザクションよりも古くなります。たとえば、0004でシステムに入るトランザクション「y」は2秒若く、古いトランザクションが優先されます。

さらに、すべてのデータ項目には最新の読み取りおよび書き込みタイムスタンプが与えられます。これにより、システムは、データ項目に対して最後の「読み取りおよび書き込み」操作がいつ実行されたかを知ることができます。

タイムスタンプ注文プロトコル

タイムスタンプ順序付けプロトコルは、競合する読み取りおよび書き込み操作でトランザクション間の直列化可能性を保証します。これは、トランザクションのタイムスタンプ値に従って競合するタスクのペアを実行する必要があるというプロトコルシステムの責任です。

  • トランザクションTiのタイムスタンプはTS(T i)として表されます。
  • データ項目Xの読み取りタイムスタンプはR-timestamp(X)で表されます。
  • データ項目Xの書き込みタイムスタンプはW-timestamp(X)で表されます。

タイムスタンプの順序付けプロトコルは次のように機能します-

  • If a transaction Ti issues a read(X) operation −

    • TS(Ti)<Wの場合-タイムスタンプ(X)
      • 操作は拒否されました。
    • TS(Ti)> = Wの場合-タイムスタンプ(X)
      • 操作が実行されました。
    • すべてのデータ項目のタイムスタンプが更新されました。
  • If a transaction Ti issues a write(X) operation −

    • TS(Ti)<R-timestamp(X)の場合
      • 操作は拒否されました。
    • TS(Ti)<Wの場合-タイムスタンプ(X)
      • 操作は拒否され、Tiはロールバックしました。
    • それ以外の場合は、操作が実行されます。

トーマスの書き込みルール

このルールは、TS(Ti)<W-timestamp(X)の場合、操作は拒否され、Tiがロールバックされることを示しています。

タイムスタンプの順序付けルールを変更して、スケジュールビューをシリアル化できるようにすることができます。

T iをロールバックする代わりに、「書き込み」操作自体は無視されます。