ホームページ >データベース >mysql チュートリアル >DBMS での同時実行制御のためのロックの使用

DBMS での同時実行制御のためのロックの使用

王林
王林転載
2023-09-02 13:57:02910ブラウズ

在 DBMS 中使用锁进行并发控制

ロックは、DBMS で同時実行制御を維持するために不可欠な部分です。ロックベースの同時実行制御を実装するシステムのトランザクションは、必要なロックを取得するまでステートメントの読み取りまたは書き込みを行うことができません。

ロックベースのプロトコルには 2 種類のロックがあります。

  • バイナリ ロック - ロックまたはロック解除の 2 つの状態のいずれかのみになります。
  • 共有/排他ロック - 読み取り操作を実行する場合にのみ共有ロックを取得します。共有ロックはデータが変更されないため、複数のトランザクション間で共有できます。書き込み操作を実行する場合は、排他ロックを使用します。排他ロックを保持しているトランザクションのみがデータ値を変更できます。

さまざまなロック プロトコルは次のとおりです。

単純なロック プロトコル

トランザクションは、書き込み操作を実行する前にデータ値のロックを取得します。書き込み操作が完了すると、ロックを解除できます。単純なロック プロトコルの例は次のとおりです。

# R(A)ロック(B)R(B)W(B)##ロック解除 (B)2 つのトランザクション T1 と T2 が上に示されています。読み取り操作にはロックは必要ありませんが、各トランザクションは書き込み操作の前にロックを取得し、その後ロックを解放します。 2 フェーズ ロック プロトコル
T1 T2
R (A)

ロック (C)

R(C)

##W(C)

#ロック解除(C)

送信

Commit

2 フェーズ ロック プロトコルには、成長フェーズと収縮フェーズという 2 つのフェーズがあります。トランザクションは成長フェーズ中にのみロックを取得できます。縮小フェーズに入ると、以前に取得したロックを解放できますが、新しいロックを取得することはできません。排他的ロックは X で表され、共有ロックは S で表されます。 2 フェーズ ロック プロトコルの例は次のとおりです。

#T1T2 ##サラ)################ ## #################サラ) XX(B) tr>##R(B)W(B)R(C) ロック解除 (B) ロックを解除 (A)##送信上記の例では、T1 と T2 が共有します。 A に対しては読み取り操作のみが実行されるため、共有変数 A を使用したロック。 T1 は、書き込み操作のために B の排他ロックを取得し、その後すぐに解放します。 T2 は C と同じことを行います。 T1T2 ### サラ )############### ## ##################サラ) ##R(B)

#XX(C)

##W(C)

#ロック解除 (C)

#ロック解除 (A)

Submit

厳密な 2 フェーズ ロック プロトコル

厳密な 2 フェーズ ロック プロトコルは、2 フェーズ ロック プロトコルと似ています。唯一の違いは、厳密な 2PL プロトコルでは、プロトコルによって取得されたすべての排他ロックは、プロトコルがコミットまたは中止されるまで保持する必要があることです。厳密な 2 フェーズ ロック プロトコルの例は次のとおりです:

XX(B)

W(B)

XX(C)

##R(C) tr> W(C)##送信ロック解除 (B) 送信ロック解除(C)

##ロック解除(A)

ロック解除(A)

上記の例では、A では読み取り操作のみが実行されるため、T1 と T2 は共有ロックを使用して変数 A を共有します。T1 は書き込み操作のために B の排他ロックを取得し、T2 は C の排他ロックを取得します。排他ロックは、トランザクションがコミットされた後にのみ解放されます。ただし、共有ロックにはそのような制限はありません。

厳密な 2 フェーズ ロック プロトコル

厳密な 2 フェーズ ロック プロトコルは、2 フェーズ ロック プロトコルと厳密な 2 フェーズ ロック プロトコルの単なる拡張です。ロックプロトコル。ここで、トランザクションによって保持されているすべてのロックは、共有か排他かに関係なく、トランザクションがコミットまたは中止されるときにのみ解放されます。厳密な 2 フェーズ ロック プロトコルの例は次のとおりです:

tr> ## #サラ )############### S(A)##R( A )##R(B)#W(B)XX(C)##Unlock(C)
T1 T2

#XX(B)

##R(C)

W(C)

提出

ロック解除 (A)

ロック解除 (B)

送信

ロック解除 (A )

上記の例では、T1 とA では読み取り操作のみが実行されるため、T2 は共有ロックを使用して変数 A を共有します。T1 は書き込み操作のために B で排他的ロックを取得し、T2 は C で同じ操作を実行します。共有ロックと排他ロックはどちらも、トランザクションがコミットされた後にのみ解放されます。

以上がDBMS での同時実行制御のためのロックの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。