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 アニメーションおよびその他の効果のサンプル コード
効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ...
MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...
リストは、類似または関連する一連の項目をリストするために使用されます。順序なしリスト(箇条書きリスト...
グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...
時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...
<br />ブログを始めて 1 年、私はブログの内外で多くのことを個人的に学びました。ま...
シェル スクリプトで電子メールを作成する必要がある場合は、コマンド ラインから電子メールを送信する知...
このエラーは初心者によく発生します。この記事では主に、エラー 2003 (HY000): '...
docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...
チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...
Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所...
1. mysqlエクスポートファイル: SELECT `pe2e_user_to_company`....
最近では、多くのウェブサイトでは、ページ上の特定のコンテンツや情報を直接コピーすることは許可されてお...
この記事の例では、参考のためにMySQLトリガーを作成するための具体的なコードを共有しています。具体...
テトリスは非常に古典的な小さなゲームで、私もそれを書いてみました。しかし、できるだけ簡潔で論理的なコ...