Mysqlのクエリ効率は非常に高いため、次のようになります(MVCCは理解するのが非常に簡単です)。

MVCCマルチバージョン同時実行制御メカニズム

1つのトランザクションで同じSQLクエリステートメントが複数回実行され、クエリ結果は同じです。他のトランザクションがデータを変更しても、現在のトランザクションSQLステートメントのクエリ結果には影響しません。これらのMysqlはどのように実行しますか?

Mysqlは、反復可能な読み取り分離レベル(デフォルトレベル)で高いトランザクション分離をどのように保証しますか?

Mysqlの分離はMVCC(Multi-Version Concurrency Control)メカニズムによって保証されています。デフォルトでは、データ行の読み取りおよび書き込み操作では、ロックと相互排除による分離は保証されず、頻繁なロックと相互排除が回避されます。 、そして、シリアライズされた分離レベルでより高い分離を保証するために、すべての操作はロックされ、相互に排他的です。Mysql は、送信サブミットレベルと繰り返し可能な読み取り分離レベルの両方でMVCCメカニズムを実装します。

ログバージョンチェーンの取り消しとビューの読み取りメカニズムの詳細な説明

ログの取り消しバージョンチェーンは、データの行が複数のトランザクションによって順番に変更された後、各トランザクションが変更された後、Mysqlは変更前のデータの取り消しロールバックログを保持し、2つの非表示フィールドtrx_id(トランザクションID)とroll_pointer(ローリングポインタ)これらの取り消しログを直列に接続して、履歴レコードバージョンチェーンを形成します。

ここに画像の説明を挿入
下で反復可能読み取り分離トランザクションをオンにするレベル、唯一のビューは、ビュー読み現在のトランザクションをするときに生成される任意のクエリのSQLをされ実行され、それがそれぞれの実行にコミット分離レベルを読まれる場合、ビューは(トランザクションの終了前に変更されることはありませんsqlのクエリ時に再生成されます)、このビューは、コミットされていないすべてのトランザクションID配列(配列の最小IDはmin_idです)と、クエリの実行時に作成された最大トランザクションID(max_id)で構成されます。トランザクションのSQLクエリ結果は、以下から取得する必要があります。対応するバージョンチェーンの最新のデータは、読み取りビューと1つずつ比較され、最終結果が得られます。バージョンチェーン比較ルール:

  1. 行のtrx_idが緑色の部分(trx_id <min_id)に該当する場合、このバージョンはコミットされたトランザクションによって生成され、このデータが表示されていることを意味します。
  2. 行のtrx_idが赤い部分(trx_id> max_id)に該当する場合、このバージョンは将来開始されるトランザクションによって生成され、非表示になります(
    行のtrx_idが現在のトランザクションである場合)。
  3. 行のtrx_idが黄色の部分(min_id <= trx_id <= max_id)に該当する場合、2つのケースがあります。
  • 行のtrx_idがビュー配列にある場合、このバージョンはまだコミットされていないトランザクションによって生成されていることを意味します(行のtrx_idが現在のトランザクションである場合)。
  • 行のtrx_idがビュー配列にない場合、このバージョンは送信されたトランザクションによって生成され、表示されていることを意味します。

削除の場合は、更新の特殊なケースと見なすことができます。バージョンチェーンの最新データがコピーされ、
trx_idは削除操作のtrx_idに変更されます。同時に、レコードのレコードヘッダーの(deleted_flag) )フラグビットにtrueを書き込み、現在のレコードが
削除されたことを示します。上記のルールに従って対応するレコードを照会するときに、delete_flagフラグビットがtrueの場合、レコードが削除されていて、データが返されないことを意味し
ます。

begin / start transactionコマンドはトランザクションの開始点ではありません。最初のステートメントを実行して、実行後にInnoDBテーブルを変更すると、トランザクションが実際に開始され、トランザクションIDがmysqlに適用されます。内部mysqlは、トランザクションに厳密に従います。トランザクションIDを割り当てる注文を開始します。

要約:
MVCCメカニズムの実現は、読み取りビューメカニズムと元に戻すバージョンチェーン比較メカニズムによって行われるため、データバージョンチェーン比較ルールに従って、異なるトランザクションがバージョンチェーン上の同じデータの異なるバージョンを読み取ります。

おすすめ

転載: blog.csdn.net/weixin_51049616/article/details/108789681