ロックは、DBMS で同時実行制御を維持するために不可欠な部分です。ロックベースの同時実行制御を実装するシステムのトランザクションは、必要なロックを取得するまでステートメントの読み取りまたは書き込みを行うことができません。
ロックベースのプロトコルには 2 種類のロックがあります。
さまざまなロック プロトコルは次のとおりです。
トランザクションは、書き込み操作を実行する前にデータ値のロックを取得します。書き込み操作が完了すると、ロックを解除できます。単純なロック プロトコルの例は次のとおりです。
T1 | T2 |
---|---|
R (A) | |
# R(A) | |
ロック (C) |
|
R(C) | |
##W(C) | |
#ロック解除(C) | 送信 |
Commit | 2 つのトランザクション T1 と T2 が上に示されています。読み取り操作にはロックは必要ありませんが、各トランザクションは書き込み操作の前にロックを取得し、その後ロックを解放します。 |
2 フェーズ ロック プロトコルには、成長フェーズと収縮フェーズという 2 つのフェーズがあります。トランザクションは成長フェーズ中にのみロックを取得できます。縮小フェーズに入ると、以前に取得したロックを解放できますが、新しいロックを取得することはできません。排他的ロックは X で表され、共有ロックは S で表されます。 2 フェーズ ロック プロトコルの例は次のとおりです。
#T1##サラ)################ ## #################サラ) | |
---|---|
tr>##R(B) | |
#XX(C) | |
##W(C) |
|
#ロック解除 (C) | |
#ロック解除 (A) | |
##送信 | |
Submit | |
厳密な 2 フェーズ ロック プロトコル 厳密な 2 フェーズ ロック プロトコルは、2 フェーズ ロック プロトコルと似ています。唯一の違いは、厳密な 2PL プロトコルでは、プロトコルによって取得されたすべての排他ロックは、プロトコルがコミットまたは中止されるまで保持する必要があることです。厳密な 2 フェーズ ロック プロトコルの例は次のとおりです: |
|
T2 | |
XX(B) | |
##R(B) | |
W(B) |
##R(C) | tr> | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
W(C) | |||||||||||||||||||||||||||||||
##ロック解除(A) | ロック解除(A) |
||||||||||||||||||||||||||||||
##送信 | |||||||||||||||||||||||||||||||
ロック解除 (B) | |||||||||||||||||||||||||||||||
上記の例では、A では読み取り操作のみが実行されるため、T1 と T2 は共有ロックを使用して変数 A を共有します。T1 は書き込み操作のために B の排他ロックを取得し、T2 は C の排他ロックを取得します。排他ロックは、トランザクションがコミットされた後にのみ解放されます。ただし、共有ロックにはそのような制限はありません。 厳密な 2 フェーズ ロック プロトコル厳密な 2 フェーズ ロック プロトコルは、2 フェーズ ロック プロトコルと厳密な 2 フェーズ ロック プロトコルの単なる拡張です。ロックプロトコル。ここで、トランザクションによって保持されているすべてのロックは、共有か排他かに関係なく、トランザクションがコミットまたは中止されるときにのみ解放されます。厳密な 2 フェーズ ロック プロトコルの例は次のとおりです:
|
以上がDBMS での同時実行制御のためのロックの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。