9

同時実行制御とトランザクション分離レベルの違いは何ですか?

私はそれらのそれぞれを明確に理解していますが、それらを相互に関連付ける問題がいくつかあります。具体的には、それらの機能にいくつかの重複が見られますが、どちらをいつ使用する必要があるのか​​ わかりません。それとも両方を一緒に使用する必要がありますか?

また、反復可能な読み取りによる悲観的ロックとはどういう意味ですか? 反復可能な読み取りは、編集されるすべての値がロックされることをすでに意味していませんか? では、悲観的ロックが依然として必要とされているのはなぜでしょうか。

4

2 に答える 2

5

同時実行制御は、同時接続から発生する問題を処理するメカニズムの一般的な用語です。

トランザクション分離レベルは、MySQL が同時実行制御を実装するメカニズムです。

MySQLが悲観的ロックなしで実装する方法に関するドキュメントについては、 Consistent Nonlocking Readsを参照してください。REPEATABLE READ

一貫性のある読み取りでは、アクセスするテーブルにロックが設定されないため、テーブルで一貫性のある読み取りが実行されている間、他のセッションはそれらのテーブルを自由に変更できます。

デフォルトのREPEATABLE READ分離レベルで実行しているとします。一貫性のある読み取り (つまり、通常のSELECTステートメント) を発行すると、 InnoDB は、クエリがデータベースを参照する時点に従って、トランザクションにタイムポイントを提供します。別のトランザクションが行を削除し、タイムポイントが割り当てられた後にコミットした場合、その行は削除されたとは見なされません。挿入と更新は同様に扱われます。

于 2012-12-02T10:54:36.263 に答える
5

この問題が発生するのは、同時実行制御に 2 つのモデルがあり、SQL 実装によって混在する場合があるためです。

  1. 2PL (Two Phase Locking) のようなロック
  2. MVCC (Multiversion Concurrency Control) のようなバージョン

悲観的とは、読み取られる行がロックされていることを意味します。楽観的とは、読み取られる行がロックされていないことを意味します。

Repeatable Read の従来の 2PL 実装は、常に悲観的です。Repeatable Read のマルチバージョン実装は楽観的です。SELECT ステートメントで読み取られる行をロックせず、他のトランザクションが SELECT で読み取られた行を変更できるようにします。このような変更は、コミットされるまで、SELECT を実行したトランザクションには表示されません。

于 2012-12-02T17:33:14.957 に答える