DBMS 同時実行制御: タイムスタンプとロックベースのプロトコル

同時実行制御とは何ですか?

同時実行制御 データベース管理システムでは、相互に競合することなく同時操作を管理する手順です。これにより、データベース トランザクションが同時に正確に実行され、それぞれのデータベースのデータ整合性を侵害することなく正しい結果が生成されます。

すべてのユーザーがデータを読み取るだけであれば、同時アクセスは非常に簡単です。ユーザーが互いに干渉することはありません。ただし、実用的なデータベースでは、読み取り操作と書き込み操作が混在するため、同時実行は課題となります。

DBMS 同時実行制御は、主にマルチユーザー システムで発生するこのような競合に対処するために使用されます。したがって、同時実行制御は、同じデータへのアクセスを必要とする 2 つ以上のデータベース トランザクションが同時に実行されるデータベース管理システムが適切に機能するための最も重要な要素です。

同時実行の潜在的な問題

DBMS 同時実行制御方式を使用するときに直面する可能性のある問題をいくつか示します。

  • 失われたアップデート 複数のトランザクションが同じ行を選択し、選択された値に基づいて行を更新すると発生します。
  • コミットされていない依存関係の問題は、別のトランザクションによって更新された行を XNUMX 番目のトランザクションが選択した場合に発生します (ダーティリード)
  • 非反復読み取り XNUMX 番目のトランザクションが同じ行に数回アクセスしようとして、毎回異なるデータを読み取るときに発生します。
  • 間違った概要の問題 これは、XNUMX つのトランザクションが繰り返されるデータ項目のすべてのインスタンスの値の要約を取得し、XNUMX 番目のトランザクションがその特定のデータ項目のいくつかのインスタンスを更新するときに発生します。 このような状況では、結果として得られる概要は正しい結果を反映していません。

同時実行方式を使用する理由

同時実行制御方式が DBMS である理由は次のとおりです。

  • 競合するトランザクション間の相互排他による分離を適用するには
  • 読み取り-書き込みおよび書き込み-書き込みの競合問題を解決するには
  • 実行障害を常に保持することでデータベースの一貫性を維持するため
  • システムは、同時トランザクション間の相互作用を制御する必要があります。 この制御は、同時制御方式を使用して実現されます。
  • 同時実行制御はシリアル化可能性の確保に役立ちます

2 人の人が同時に電子キオスクに行って、同じ映画の同じ上映時間の映画チケットを購入するとします。

しかし、その劇場には映画上映用の座席が XNUMX つだけ残っています。 DBMS で同時実行制御がないと、両方の映画鑑賞者がチケットを購入することになる可能性があります。 ただし、同時実行制御方式ではこれは許可されません。 どちらの映画鑑賞者も、映画座席データベースに書き込まれた情報に引き続きアクセスできます。 ただし、同時実行制御では、最初にトランザクション プロセスを完了した購入者にのみチケットが提供されます。

同時実行制御プロトコル

同時実行制御プロトコルによって、許可される同時実行の量と課されるオーバーヘッドの量に関して異なる利点が提供されます。以下は、DBMS における同時実行制御手法です。

  • ロックベースのプロトコル
  • XNUMX フェーズ ロック プロトコル
  • タイムスタンプベースのプロトコル
  • 検証ベースのプロトコル

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

ロックベースのプロトコル DBMS では、適切なロックを取得するまでトランザクションがデータの読み取りや書き込みができないメカニズムです。ロック ベースのプロトコルは、特定のトランザクションを単一のユーザーにロックまたは分離することにより、同時トランザクションの DBMS における同時実行の問題を排除するのに役立ちます。

ロックは、データ項目に関連付けられたデータ変数です。このロックは、データ項目に対して実行できる操作を意味します。DBMS のロックは、同時トランザクションによるデータベース項目へのアクセスを同期するのに役立ちます。

すべてのロック要求は同時実行制御マネージャーに対して行われます。 トランザクションは、ロック要求が許可された場合にのみ続行されます。

バイナリ ロック: データ項目のバイナリ ロックは、ロック状態またはロック解除状態のいずれかになります。

共有/独占: このタイプのロック メカニズムは、DBMS 内のロックをその用途に基づいて分離します。書き込み操作を実行するためにデータ項目に対してロックが取得される場合、それは排他ロックと呼ばれます。

1. 共有ロック (S):

共有ロックは読み取り専用ロックとも呼ばれます。 共有ロックを使用すると、トランザクション間でデータ項目を共有できます。 これは、データ項目のデータを更新する権限が決してないためです。

たとえば、XNUMX つのトランザクションが人の口座残高を読み取るケースを考えてみましょう。 の データベース 共有ロックを設定することで読み取りを許可します。 ただし、別のトランザクションがそのアカウントの残高を更新しようとすると、読み取りプロセスが終了するまで共有ロックによって更新が妨げられます。

2. 排他的ロック (X):

排他ロックを使用すると、データ項目の読み取りと書き込みが可能になります。これは排他的であり、同じデータ項目に対して同時に保持することはできません。X ロックは lock-x 命令を使用して要求されます。トランザクションは、「書き込み」操作の終了後にデータ項目のロックを解除できます。

たとえば、トランザクションで個人の口座残高を更新する必要がある場合、このトランザクションに X ロックを設定することで、このトランザクションを許可できます。したがって、2 番目のトランザクションが読み取りまたは書き込みを行う必要がある場合、排他ロックによってこの操作が防止されます。

3. 単純化されたロックプロトコル

このタイプのロックベースのプロトコルにより、トランザクションは操作を開始する前にすべてのオブジェクトのロックを取得できます。トランザクションは、「書き込み」操作の終了後にデータ項目のロックを解除できます。

4. ロックの事前要求

事前ロック プロトコルは、操作を評価し、実行プロセスを開始するために必要なデータ項目のリストを作成するのに役立ちます。すべてのロックが許可されると、トランザクションが実行されます。その後、すべての操作が終了すると、すべてのロックが解除されます。

飢餓

スターベーションとは、トランザクションがロックを取得するために無期限に待機する必要がある状況です。

飢餓の原因は次のとおりです。

  • ロックされたアイテムの待機スキームが適切に管理されていない場合
  • リソースリークの場合
  • 同じトランザクションが繰り返し被害者として選択される

Deadlock

デッドロックとは、2 つ以上のプロセスが互いにリソースの解放を待機している、または 2 つ以上のプロセスが循環チェーンでリソースを待機している特定の状況を指します。

XNUMX フェーズ ロック プロトコル

XNUMX フェーズ ロック プロトコル 2PL プロトコルとも呼ばれるこのプロトコルは、トランザクション データにロックを適用して他のトランザクションが同じデータに同時にアクセスするのをブロックすることで直列化可能性を保証する、DBMS における同時実行制御の方法です。XNUMX フェーズ ロック プロトコルは、DBMS における同時実行の問題を解消するのに役立ちます。

このロック プロトコルは、トランザクションの実行フェーズを XNUMX つの異なる部分に分割します。

  • 最初のフェーズでは、トランザクションの実行が開始され、必要なロックに対する許可が必要になります。
  • XNUMX 番目の部分では、トランザクションがすべてのロックを取得します。 トランザクションが最初のロックを解放すると、XNUMX 番目のフェーズが開始されます。
  • この XNUMX 番目のフェーズでは、トランザクションは新しいロックを要求できません。 代わりに、取得したロックのみを解放します。

XNUMX フェーズ ロック プロトコル

XNUMX フェーズ ロック プロトコルを使用すると、各トランザクションは次の XNUMX つのステップでロックまたはロック解除のリクエストを行うことができます。

  • 成長期: このフェーズでは、トランザクションはロックを取得することはできますが、ロックを解放することはできません。
  • 縮小段階: このフェーズでは、トランザクションはロックを解放しますが、新しいロックを取得できない場合があります。

2PL プロトコルが直列化可能性を提供しているのは事実です。ただし、デッドロックが発生しないことは保証されません。

上記の図では、ローカルおよびグローバルのデッドロック検出器がデッドロックを検索し、トランザクションを初期状態に再開することでデッドロックを解決していることがわかります。

厳密なXNUMX段階ロック方式

Strict-Two 位相ロック システムは 2PL とほぼ同様です。 唯一の違いは、Strict-2PL は使用後にロックを解放しないことです。 コミットポイントまですべてのロックを保持し、プロセスが終了するとすべてのロックを一度に解放します。

集中型2PL

Centralized 2 PL では、単一のサイトがロック管理プロセスを担当します。 DBMS 全体に対してロック マネージャーは XNUMX つだけあります。

プライマリコピー 2PL

プライマリ コピー 2PL メカニズムでは、多くのロック マネージャーがさまざまなサイトに分散されます。 その後、特定のロック マネージャーが一連のデータ項目のロックを管理します。 プライマリ コピーが更新されると、その変更はスレーブに伝播されます。

分散型2PL

このような 2 段階のロック機構では、ロック マネージャーがすべてのサイトに分散されます。 彼らは、そのサイトのデータのロックを管理する責任があります。 データが複製されない場合は、プライマリ コピー 2PL と同等です。 分散 2PL の通信コストはプライマリ コピー XNUMXPL よりもかなり高くなります

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

タイムスタンプベースのプロトコル DBMS では、システム時間または論理カウンタをタイムスタンプとして使用し、同時トランザクションの実行をシリアル化するアルゴリズムです。タイムスタンプ ベースのプロトコルにより、競合するすべての読み取りおよび書き込み操作がタイムスタンプ順に実行されます。

このメソッドでは、常に古いトランザクションが優先されます。 システム時間を使用してトランザクションのタイムスタンプを決定します。 これは、最も一般的に使用される同時実行プロトコルです。

ロックベースのプロトコルは、競合するトランザクションの実行順序を管理するのに役立ちます。タイムスタンプベースのプロトコルは、操作が作成されるとすぐに競合を管理します。

例:

Suppose there are there transactions T1, T2, and T3. 
T1 has entered the system at time 0010 
T2 has entered the system at 0020
T3 has entered the system at 0030
Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.

Advantages:

  • スケジュールは 2PL プロトコルと同様にシリアル化可能です
  • トランザクションを待つ必要がないため、デッドロックの可能性がなくなります。

短所:

同じトランザクションが再開され、継続的に中止されると、スターベーションが発生する可能性があります。

検証ベースのプロトコル

検証ベースのプロトコル DBMS では、オプティミスティック同時実行制御技術とも呼ばれ、トランザクションの同時実行を回避する方法です。 このプロトコルでは、データ自体ではなくトランザクション データのローカル コピーが更新されるため、トランザクション実行中の干渉が少なくなります。

検証ベースのプロトコルは、次の 3 つのフェーズで実行されます。

  1. 読み取りフェーズ
  2. 検証フェーズ
  3. 書き込みフェーズ

読み取りフェーズ

読み取りフェーズでは、トランザクションによってデータベースのデータ値を読み取ることができますが、書き込み操作または更新は実際のデータベースではなく、ローカル データ コピーにのみ適用されます。

検証フェーズ

検証フェーズでは、トランザクション更新をデータベースに適用する際にデータがチェックされ、シリアル化可能性の違反がないことが確認されます。

書き込みフェーズ

書き込みフェーズでは、検証が成功した場合は更新がデータベースに適用され、そうでない場合は更新がデータベースに適用されます。 更新は適用されず、トランザクションはロールバックされます。

優れた同時実行プロトコルの特徴

理想的な同時実行制御 DBMS メカニズムの目的は次のとおりです。

  • サイト障害や通信障害に対する耐性が必要です。
  • これにより、トランザクションを並列実行して最大の同時実行性を実現できます。
  • オーバーヘッドを最小限に抑えるために、その記憶メカニズムと計算方法は控えめにする必要があります。
  • トランザクションのアトミックアクションの構造にいくつかの制約を適用する必要があります。

まとめ

  • 同時実行制御は次の手順です。 DBMS 互いに競合することなく同時操作を管理します。
  • 更新の喪失、ダーティ読み取り、反復不可能な読み取り、および不正な概要の問題は、同時実行制御の欠如によって直面する問題です。
  • ロックベース、ツーフェーズ、タイムスタンプベース、検証ベースは同時処理プロトコルのタイプです
  • ロックは共有 (S) または排他的 (X) にすることができます。
  • 2 フェーズ ロック プロトコル (2PL プロトコルとも呼ばれる) では、トランザクションはロックの XNUMX つを解放した後にロックを取得する必要があります。このプロトコルには、拡大と縮小の XNUMX つのフェーズがあります。
  • タイムスタンプ ベースのアルゴリズムは、タイムスタンプを使用して同時トランザクションの実行をシリアル化します。 プロトコルでは、 システム時間または論理カウントとして タイムスタンプ。