MVCCMVCC (Multi-Version Concurrency Control) は、マルチバージョン同時実行制御です。トランザクションの同時実行性とロールバックを実現するのは InnoDB の重要な機能です。ロック メカニズムは同時操作を制御できますが、システム オーバーヘッドが大きく、ほとんどの場合、行レベルのロックは MVCC に置き換えられます。MVCC を使用すると、システム オーバーヘッドを削減できます。 具体的な実装としては、データベースの各行に次の 3 つのフィールドを追加します。
スナップショット読み取りたとえば、ロックされていない選択操作はスナップショット読み取りです。スナップショット読み取りの出現は、同時実行パフォーマンスの向上を考慮した上で行われました。スナップショット読み取りの実装は、マルチバージョン同時実行制御、つまり MVCC に基づいています。 MVCC は行ロックの変形と考えることができます。多くの場合、ロック操作を回避し、オーバーヘッドを削減します。複数のバージョンに基づいているため、スナップショット読み取りでは必ずしも最新バージョンのデータが読み取られるわけではなく、以前の履歴バージョンが読み取られる場合があります。 現在の読書読み取られるのは現在のデータであり、トランザクションが開始される前の状態まで遡るために UNDO ログを使用する必要はありません。読み取られるのはレコードの最新バージョンです。読み取り時には、他の同時トランザクションが現在のレコードを変更できないようにする必要があり、読み取られたレコードはロックされます。
簡単に言えば、MVCC はロックなしで読み取り書き込み競合を実現することであり、この読み取りは現在の読み取りではなくスナップショット読み取りを指します。現在の読み取りは実際にはロック操作であり、悲観的ロックの実装です。
MVCC 実装原則3つの隠しフィールド
バージョンチェーン/元に戻すログこれは、UNDO ログにトランザクション前のデータの古いバージョンが記録され、行レコード内のロールバック ポインターが古いバージョンの位置を指すため、バージョン チェーンが形成されるためです。読み取りビューは、特定の条件を満たす DB_TRX_ID が見つかるまで、リンク リスト内の DB_TRX_ID を走査し続けます。そうすると、DB_TRX_ID が配置されている古いレコードが、現在のトランザクションが参照できる最新の「古いバージョン」になります。 閲覧ビュートランザクションが開かれたときに現在アクティブなすべてのトランザクション (コミットされていないトランザクション) のコレクションです。つまり、読み取りビューは、トランザクションがスナップショット読み取り操作を実行したときに生成される読み取りビューです。トランザクションによってスナップショット読み取りが実行された瞬間に、現在のデータベース システムのスナップショットが生成され、システム内の現在のアクティブなトランザクションの ID が記録および維持されます。
MVCC 実装の全体的なプロセス:要約する
参照:[MySQL ノート] MySQL の MVCC と実装原則を正しく理解する (推奨) MySQL · エンジン機能 · InnoDB トランザクション システム (taobao.org) mvcc の詳細な説明 - Jianshu (jianshu.com) これで、MySQL のマルチバージョン同時実行制御 MVCC の詳細な研究に関するこの記事は終了です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTML でマウスが停止したときに行全体の色 (tr) を変更する方法
>>: CSS3 トランジション回転パースペクティブ 2D3D アニメーションおよびその他の効果のサンプル コード
MySQL では、1 つの列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、M...
ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...
コメントとメッセージはもともと、ウェブマスターがコミュニティと読者層を構築するための優れた手段でした...
目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...
この記事では、圧縮パッケージから MySQL をインストールする方法について説明します。 1. My...
目次1 はじめに2 基本的な使い方2.1 方法2.2 計算プロパティ2.3 リスナーを見る3 3つの...
リスト形式のテキストの展開と折りたたみの実装は参考までに。具体的な内容は以下のとおりです。必要: 1...
エラーの説明Docker Desktop をインストールすると、WSL2 (Windows ベースの...
1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...
数日前、Codepen で @Kyle Wetton が書いた、CSS ブレンディング モードと S...
目次グローバルオブジェクトグローバルオブジェクトとグローバル変数プロセスコンソール一般的なツールユー...
これまでにも Docker 環境でいくつかのプロジェクトを実行したことはありますが、まだイメージをよ...
導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...
img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...
必要な効果: 確認コードを送信するためにクリックした後、ボタンは無効になり、5 秒後に無効解除されま...